如何搜索字符串以查看我是不是可以拼写单词

Posted

技术标签:

【中文标题】如何搜索字符串以查看我是不是可以拼写单词【英文标题】:How to search through a string to see if i can spell a word如何搜索字符串以查看我是否可以拼写单词 【发布时间】:2013-03-29 14:43:59 【问题描述】:

比如我有

x = "dsjcosnag"
y = "dog"

print(checkYinX(y,x))
>>true

所以我想我需要使用一个while循环作为y中每个字母的计数器,然后我可以使用itetools循环遍历每个x,每个循环它会检查x == y , 如果是,则将其删除,然后检查 o 中的下一个字母。

有没有更简单的方法来做到这一点?

【问题讨论】:

x 中的字母顺序重要吗? 【参考方案1】:

使用collections.Counter()xy转换为多组,然后相减看看y的所有字母是否都能在x中找到:

from collections import Counter

def checkYinX(y, x):
    return not (Counter(y) - Counter(x))

减去多集 删除 个字符,当它们的计数降至 0 时。如果这导致空多集,它在布尔上下文中变为 False,就像所有“空”python 类型一样.如果是这种情况,not 会将其转换为 True

演示:

>>> x = "dsjcosnag"
>>> y = "dog"
>>> print(checkYinX(y,x))
True
>>> print(checkYinX('cat',x))
False

【讨论】:

return 'not' 是做什么的?而不是仅仅返回?我在没有 not 的情况下对其进行了测试,它只返回 counter() @jack:减法的结果返回一个Counter()对象。如果为not 返回True,否则返回False。 python 中的空对象在布尔上下文中测试为False【参考方案2】:

根据聊天中的要求,这是一种不使用collections.Counter 的方法:

def countLetters(word):
    d = 
    for l in word:
        d[l] = d.get(l,0) + 1
    return d

def checkSubset(answer,letters):
    a, l = countLetters(answer), countLetters(letters)
    return all(l.get(x,0) >= a.get(x) for x in a.keys())

print(checkSubset('dog','odr'))

【讨论】:

以上是关于如何搜索字符串以查看我是不是可以拼写单词的主要内容,如果未能解决你的问题,请参考以下文章

如何在整个消息中搜索一个单词,将该单词分解为一个数组,然后检查其他数组以查看它是不是匹配?

单词拼写检查之cutoff距离

Python - 如何搜索没有空格的大字符串,以查看值是不是存在

执行查询搜索以匹配字符而不是确切的单词。

LeetCode 1160. 拼写单词

LeetCode --- 字符串系列 --- 拼写单词