通过对字母进行排序,可以获得任意字符串的“字母袋”表示:
function sortLetters(word){
return word.split('').sort().join('');
}
然后可以迭代输入,将具有相同字母袋表示的单词分组到一个对象中:
const grouped = arr.reduce(function (m, word) {
var bagRepr = sortLetters(word);
var withSameLetters = m[bagRepr] ||Â [];
withSameLetters.push(word);
m[bagRepr] = withSameLetters;
return m;
}, {});
const result = Object.values(grouped)
.filter(function (arr) {
return arr.length > 1;
});
这是O(n),前提是
sortLetters()
是O(1),如果单词长度以常数为界,则为O(1)。
免责声明:
请注意,我们这里只讨论渐近复杂性-这并不意味着从实际角度来看,这种方法是最有效的!