【发布时间】:2018-07-11 23:45:50
【问题描述】:
var isAnagram = function(s, t) {
const len = s.length;
if (len !== t.length) return false;
const hashTab = {};
for (let i = 0; i < len; i++) {
if (!hashTab[s[i]]) {
hashTab[s[i]] = 1;
} else {
hashTab[s[i]]++;
}
if (!hashTab[t[i]]) {
hashTab[t[i]] = -1;
} else {
hashTab[t[i]]--;
}
}
for (let item in hashTab) {
if (hashTab[item]) return false;
}
return true;
很难弄清楚这个算法的空间复杂度。我的假设是 O(n),因为哈希表的大小与输入 s 相关。本题假设字符串只包含小写字母。
【问题讨论】:
-
可能我理解错了,但是,如果字符串只包含小写字母,那么
hashTab中可能只有26个唯一键,所以hashTab的最大大小是26个键值对吧?假设我们使用固定位计数作为值,这给出了 constant 范围的辅助空间使用(或者,如果计数是任意多位,则计数的大小是对数的,因此总体空间使用将是对数)。 -
同意,就字符串的长度而言,它是 O(n),但受字母表大小的限制(例如,如果字母表是 [a-z],则为 26,如果字母表是所有 Unicode 字符)
标签: javascript algorithm big-o