Python 确定公共子串

Python 确定公共子串,python,python-3.x,Python,Python 3.x,给定两个字符串,确定它们是否共享一个公共子字符串。子字符串可以小到一个字符 例如: s1 = "and" s2 = "art" 他们都有“a”字。然后返回一个字符串:YES或NO def twoStrings(s1, s2): UniqueChar_S1 = (char for char in s1) UniqueChar_S2 = (char for char in s2) SubStringExists = False

给定两个字符串,确定它们是否共享一个公共子字符串。子字符串可以小到一个字符

例如:

s1 = "and"
s2 = "art"
他们都有“a”字。然后返回一个字符串:YES或NO

def twoStrings(s1, s2):
    UniqueChar_S1 = (char for char in s1)
    UniqueChar_S2 = (char for char in s2)

    SubStringExists = False
    for i in set(UniqueChar_S1):
        if i in set(UniqueChar_S2):
            SubStringExists = True
            break
        else:
            continue

    return "YES"*int(SubStringExists) + "NO"*(1 - int(SubStringExists))

def main():
    q = int(input())

    for q_itr in range(q):
        s1 = input()

        s2 = input()

        result = twoStrings(s1, s2)

if __name__ == "__main__":
    main()
输入示例:

4
wouldyoulikefries
abcabcabcabcabcabc
hackerrankcommunity
cdecdecdecde
jackandjill
wentupthehill
writetoyourparents
fghmqzldbc
预期产出:

NO
YES
YES
NO
失败的输入示例:

2
aardvark
apple
beetroot
sandals

我没有被抛出一个错误,因此我不确定我的代码有什么问题,我看不到代码有任何问题,因此我想知道是否有人可以为我指出任何问题。此外,如果您有任何改进,我们将不胜感激。

您需要对代码进行如下修改,因为它更加优化:


def twoStrings(s1, s2):
    UniqueChar_S1 = set(s1)
    UniqueChar_S2 = set(s2)

    for i in UniqueChar_S1:
        if i in UniqueChar_S2:
            return "YES"
 
    return "NO"

UniqueChar_S1=(S1中字符的字符)是一个生成器

for i in set(UniqueChar_S1):
    if i in set(UniqueChar_S2):
因此,在检查了“if”条件之后,set(UniqueChar_S2)的值在第二次迭代中将为空

因此,我建议您使用以下代码:

def twoStrings(s1, s2):
    SubStringExists = set(s1)&set(s2)
    return "YES" if SubStringExists else "NO"

最简单的形式是:
如果设置为“否”(s1)。isdisjoint(s2)否则为“是”

简单得多,但在某些情况下仍提供不正确的输出。例如:
2 hello world hi world
它作为输出提供了什么@输出为:否NO@Jack我想邀请你加入聊天室:@Jack这是因为我的例子中的输出很好,我想你不想使用正则表达式。。。(?)你好。只是出于好奇。是否有原因选择了
isdisjoint
而不是
intersection
?isdisoint将在第一次匹配时退出,因此它不需要构建结果交叉集。该函数也不需要将s2转换为集合。所以,如果您有两组100个相同的元素,那么在返回之前,intersection需要遍历所有s2以构建一个100元素集,而isdisjoint只需要从s2I中读取一个元素。非常感谢您的时间和解释。
def twoStrings(s1, s2):
    SubStringExists = set(s1)&set(s2)
    return "YES" if SubStringExists else "NO"