我已经整理出两个字符串,然后使用json.stringify比较它以获得Anagram。请参考下面的代码,这是正确的编码方法。
function same(ar, ar1) {
//sorting the string
var o = ar.split("").sort();
var o1 = ar1.split("").sort();
//comparing two string
if (JSON.stringify(o) == JSON.stringify(o1)) {
return true;
} else {
return false;
}
}
same("ria", "air"); //true
same("", ""); //true
same("aaz", zza); //false
答案 0 :(得分:1)
在大多数情况下都可以使用,但是不必要地在计算上昂贵。
使用某些非ASCII字符时,可能不起作用,因为.split('')
将导致字符代码点分离,例如:
console.log('?'.split(''));
这不是每个字符作为数组元素的准确表示。 Use Array.from
instead:
console.log(Array.from('?'));
此后,您还可以通过计算每个字符的出现次数(O(n)
)而不是排序(O(n log n)
)来降低算法的开销。例如:
const getCount = str => Array.from(str).reduce((counts, char) => {
counts[char] = (counts[char] || 0) + 1;
return counts;
}, {});
function same(ar,ar1){
const counts1 = getCount(ar);
const counts2 = getCount(ar1);
const keys1 = Object.keys(counts1);
const keys2 = Object.keys(counts2);
if (keys1.length !== keys2.length) {
return false;
}
return keys1.every(char => counts1[char] === counts2[char]);
}
console.log(same('abc', 'cba'));
console.log(same('abc', 'aba'));