Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
//这个还有一个巧妙的Java方法
var temp = [];
var hasOccur = {};
var num = s.length;
for (var i = 0; i<num; i++) {
if (hasOccur[s[i]]===undefined) {
var index = temp.indexOf(s[i]);
if (index===-1) {
temp.push(s[i]);
//console.log(s[i]+'put');
} else {
temp.splice(index,1);
hasOccur[s[i]]=1;
//console.log(s[i]+'hasOccur');
}
}
}
return temp.length>0 ? s.indexOf(temp[0]) : -1;
};
这里还有一个比较巧妙的Java方法:
public class Solution {
public int firstUniqChar(String s) {
if (s == null || s.equals("")) return -1;
char[] c = s.toCharArray();
int[] cnt = new int[256];
for (int i = 0; i < c.length; i++) {
cnt[c[i]]++;
}
for (int i = 0; i < c.length; i++) {
if (cnt[c[i]] == 1) return i;
}
return -1;
}
}
在这个方法里,使用了一个cnt数组,其下标是每个出现过的字母的ASC码,值是其出现的次数。对比我的方法,它节省了在temp数组里搜寻这个字母出现位置的时间。