我需要查找字符串是否包含子字符串的所有字符。因此,对于 7 个字符的字符串,我想知道 5 个字符的子字符串的字符是否在字符串中,没有重复字母(如果子字符串有 2 个字母 a,则该字符串最多需要 2 个字母 a)。举个例子 :Substring = 'aabfy'String1 = 'aabcfgy'String2 = 'abcfgmy' String3 = 'aaabcfy'那么 String1 和 String3 为 True,而 String2 为 False。因为子字符串在 1 和 3 中而不在 2 中(双 a,但它也可以是任何其他字母)。我希望我能解释自己,任何问题我都可以并且会回答。
2 回答

长风秋雁
TA贡献1757条经验 获得超7个赞
或者str.count在列表理解中使用,使用all:
def f(s):
return all(s.count(i)>=Substring.count(i) for i in Substring)
print(f(String1))
print(f(String2))
print(f(String3))
输出:
True
False
True

牛魔王的故事
TA贡献1830条经验 获得超3个赞
您可以通过collections.Counter以下方式使用:
from collections import Counter
def contains_all(string, substring):
c1, c2 = Counter(string), Counter(substring)
return all(c1[x] >= c2[x] for x in c2)
这将确保子字符串中的每个字符在包含字符串中的次数至少相同。
>>> contains_all('aaabcfy', 'aabfy')
True
>>> contains_all('abcfgmy', 'aabfy')
False
>>> contains_all('aabcfgy', 'aabfy')
True
添加回答
举报
0/150
提交
取消