我编写了这段代码来检查一个单词是否可以由另一个字符串中可用的字母组成。例如,“wine”可以使用 str1 = "kkwlaiern"中包含的字母来书写。但是,我正在寻找一种更有效的方法来做到这一点。到目前为止,这是我的代码:
function scramble(str1, str2) {
x =str1.split("");
y =str2.split("");
var h = 0;
for (i=0, g = y.length; i<g; i++){
for (j=0, f= x.length; j<f; j++){
if (x[j]==y[i]){
x.splice(j,1);
h++;
break;
}}
}
if( h == y.length){
return true;}
else{return false;}
}
如何在不嵌套“for”循环的情况下编写相同的函数?
最佳答案
声明一个大小为 26 的数组并将其初始化为 0(对应于英文字母的索引)。
使用 for
循环读取更大的字符串并在数组中递增它:
a[str1[i]-'a']++
接下来,读取较小的字符串并将其与数组的值进行比较:
if(a[str2[j]-'a']>0){
a[str2[j]-'a']--;
}
如果str2
的所有元素都满足上述条件,则str2
可以从str1
派生。
关于javascript - 比较两个字符串时如何避免嵌套循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314525/