我试图使用Javascript来查看某个字符串是否包含构成另一个字符串的所有字符。
例如,单词“hello”包含组成单词“hell”的所有字符,单词“hellowy”包含组成单词“yellow”的所有字符。
最重要的是,无论两个字符串中的字符顺序如何,该方法都需要工作。此外,字符的数量很重要。“Hel”并不包含组成“hell”的所有字符。这是指严格的字符数量:单词hell需要两个l而hel只有一个l。
进一步澄清这个问题,我不担心在从字符串的字符组成子串之后留下一些“未使用”的字符,也就是说,“hell”仍然应该包含单词“hell”的所有字母。
我如何有效地完成这一点?也许有一个正则表达式的解决方案?速度是一个问题,但不是绝对关键的。
5条答案
按热度按时间c9x0cxw01#
您可以使用
every
:Every
将在第一个falsy值中失败,然后它不会搜索 * 每个 * 字母。uwopmtnx2#
如果字母的数量很重要,那么可能是这样的:
这比上面的答案要慢,但是如果字符串中有一些重复,那么就可以缓存并获得比其他答案更好的速度性能:
pzfprimi3#
编辑、更新
此外,字符的数量也很重要。“Hel”并不包含组成“Hell”的所有字符
你可以使用一个变量来存储
Boolean
值,for..of
循环,String.prototype.indexOf()
检查,设置Boolean
变量,break
循环,如果false
。您还应该能够包括检查输入字符串
.length
是否等于if
条件下的匹配字符串.length
,如果两个字符串.length
属性不相等,则将变量设置为false
。0ve6wy6x4#
做一些训练我想出了这个东西:
ryoqjall5#
我尝试了一些东西,依靠别人的评论,并得出了这个结论。它基本上每次子字符串中的一个字母返回正索引值时都使用count变量,然后检查总计数是否等于子字符串的长度(* 逻辑是任何返回-1的字母都不存在并且不会被计数 *)。如果计数相等,则所有的字母都通过了测试,如果没有,则测试失败。
它适用于反向字母,子字符串中重复的字母(即'heell'作为子字符串也会通过'hello'的测试。