Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode"
return 0.
s = "loveleetcode",
return 2.
Note: You may assume the string contain only lowercase letters.
Solution:
public int firstUniqChar(String s) {
if(s==null||s.length()==0) return -1;
int[] freq=new int[256];
char[] cs=s.toCharArray();
for(char c:cs){
freq[c]++;
}
for(int i=0;i<cs.length;i++){
if(freq[cs[i]]==1){
return i;
}
}
return -1;
}
时间复杂度:O(n)
空间复杂度:O(1)
哈希表的应用。两次遍历。可以优化空间复杂度至常数26,因为题目假定全是小写字符,所以哈希索引可以为c[i]-'a'
,这样就全是小写字符。
我记得有一道题是返回第一次出现两次的字符,那个可以一次遍历,因为在put哈希表的时候,可以先检查哈希键存不存在,不存在再put进去,存在就直接返回,所以可以一次遍历完成。由于这题不遍历完一次是不知道是不是只出现一次的,所以一定要两次遍历。
网友评论