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"