/** * @param {string} s * @return {number} */ var firstUniqChar = function (s) { let temp = {}; for (let i = 0; i < s.length; i++) { if (!temp[s[i]]) { temp[s[i]] = 1; } else { temp[s[i]]++; } } for (let i = 0; i < s.length; i++) { if (temp[s[i]] === 1) { return i } } return -1 };
这种方法的时间复杂度是O(2n),执行结果不太理想,执行用时184mm
实现2
想到可以同时从正反查找字符串出现的位置,如果是同一个位置,那么就返回改下标:
1 2 3 4 5 6 7 8 9 10
var firstUniqChar = function (s) { const length = s.length; for (let i = 0; i < length; i++) { const str = s[i]; if (s.lastIndexOf(str) === s.indexOf(str)) { return i } } return -1 };
var firstUniqChar = function (s) { const alpha = 'abcdefghijklmnopqrstuvwxyz'; let first = s.length; for (let i = 0; i < alpha.length; ++i) { let index = s.indexOf(alpha[i]); if (index !== -1 && index === s.lastIndexOf(alpha[i])) { if (index < first) { first = index; } } } return first === s.length ? -1 : first; };