我对以下问题遇到困难。我基本上必须编写一个代码/函数,如果 str1 的一部分可以重新排列为 str2,则返回 true。
编写函数 scramble(str1,str2),如果 str1 字符的一部分可以重新排列以匹配 str2,则返回 true,否则返回 false。
例如:
str1 是“rkqodlw”,str2 是“world”,输出应返回 true。
str1 是“cedewaraaossoqqyt”,str2 是“codewars”应该返回 true。
str1 是“katas”,str2 是“steak”应该返回 false。
仅使用小写字母 (a-z)。不包含标点符号或数字。
需要考虑性能。
以下是我当前的代码:
function scramble(str1, str2) {
var first; //longer string
var second; //shorter string
if(str1 || str2 === "undefined") {
return false;
}
if(str1.length > str2.length) {
first = str1;
second = str2
} else if(str2.length > str1.length) {
first = str2;
second = str1;
}
for (i=0; i<second.length; i++) {
if (first.indexOf(second[i]) === -1) {
return false;
}
}
return true;
}
你能帮我解答这个问题吗?
您可以使用带有字母计数的哈希表并检查计数并减少计数。
该提案不会改变数组。
function scramble(str1, str2) {
var count = Object.create(null);
Array.prototype.forEach.call(str1, function(a) {
count[a] = (count[a] || 0) + 1;
});
return Array.prototype.every.call(str2, function(a) {
return count[a]--;
});
}
console.log(scramble('rkqodlw', 'world')); // true
console.log(scramble('cedewaraaossoqqyt', 'codewars')); // true
console.log(scramble('katas', 'steak')); // false
console.log(scramble('', 'o')); // false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)