python - 如何检查字符串是否包含子字符串的所有字符?

标签 python python-3.x string python-2.7 substring

我需要查找一个字符串是否包含子字符串的所有字符。因此,对于 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/

相关文章:

java - 替换存储在字符串数组中的换行符

python - 如果字符串段落中的项目属于字符串列表,则删除它们?

python - 简单的python程序问题

python - 提高 pandas 数据框的性能

python - 在 python 中读取 PASCAL VOC 注释

python - 通过 Simple-Salesforce 批量插入时间字段

python - 将文档逐行追加到列表中

python - 如何根据其他列的数量保留行数?

javascript - String 函数 valueOf() 在 JS String 库中没有用吗?

python - 尽管键已存在,但字典键错误