我需要查找一个字符串是否包含子字符串的所有字符。因此,对于 7 个字符的字符串,我想知道 5 个字符的子字符串的字符是否在字符串中,且不重复字母(如果子字符串有 2 个字母 a,则字符串最多需要 2 个字母 a)。
例如:
Substring = 'aabfy'
String1 = 'aabcfgy'
String2 = 'abcfgmy'
String3 = 'aaabcfy'
那么 String1 和 String3 为 True,但 String2 为 False。因为子字符串在1和3中,但不在2中(双a,但也可以是任何其他字母)。
我希望我能够解释自己,任何我能够并且愿意回答的问题。
最佳答案
您可以使用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
更新:更好的版本(感谢@HenadziRabkin的提示),使用Counter
差异:
def contains_all(string, substring):
return not (Counter(substring) - Counter(string))
self.cs = Counter(source)
# more efficient version
def countains_all(target):
ct = Counter(target)
for k,v in ct.items(): # Compare only target symbols
if k not in self.cs or self.cs[k]- v < 0: # Break comparison if a source has number of expected symbol types less than a target
return False
return True
关于python - 如何检查字符串是否包含子字符串的所有字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167003/