exe*_*ook 9 javascript string comparison
我有各种字符串比较和差异算法,但在某些时候,在我应用它们之前,我想找到两个字符串是否至少有一个共同的字符.这样我就可以跳过更复杂的功能.所以我需要一个非常快速的JavaScript函数来查找字符串A和字符串B是否至少有一个共同字符.
首先,我想为字符串A创建一个字符映射,然后检查字符串B中的每个字符对着该映射,直到找到某些内容.但后来我才意识到,如果两个字符串都很大并且它们有一个共同的第一个字符,那么为字符串A创建一个完整的映射效率会很低.
更新:有人回答使用indexOf(),这让我感到困惑.也许短语"有共同的字符"意味着"字符串是另一个字符串"是一样的吗?让我举一个我想要的例子:
例如JavaScript,Stop and stay有一个S共同的角色.其他例子是please look right,break the ice他们有一个k共同的性格.
最简单的方法是循环遍历一个字符串中的每个字母,看看另一个字符串是否包含任何单个字母。
除非字符串一开始就按字母顺序排序,否则没有比检查每个字母更有效的方法了。
function anythingInCommon(a, b){
if( b.length < a.length )
return anythingInCommon(b, a)
for( var i = 0, len = a.length; i < len; i++ )
if(b.indexOf(a[i]) != -1)
return true;
return false
}
console.log(
anythingInCommon("aaaaaaaaaaaaaabbbbbbccccc", "xc"),
anythingInCommon("aaaaaaaaaaaaaabbbbbbccccc", "x")
)Run Code Online (Sandbox Code Playgroud)
anythingInCommon('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa','cddabddde')
Run Code Online (Sandbox Code Playgroud)
提琴手: http: //jsfiddle.net/LRxGK/4/
单程 ,
实际上扩展了你的地图方法
为您的角色集创建两个bit Arrays,比如说为a-z您创建一个bit array of 26,以及您遇到的任何角色set the flag to 1。因此,您string A一次读取一个字符,并lookup in string B's flagArray查看相应的位是否打开(否则在字符串 A 的 flagArray 中将此位设置为“on”),在同一次迭代中,对字符串 B 的当前字符和 A 的 flagarray 执行此操作,如果它们都不匹配,然后为两个位数组中的当前字符设置相关位