解题思路
利用一个集合Set存放已经出现过的字母,从字符串开头开始检索,如果从这个字符开始没有与之相同的字符且该字符是第一次出现(即indexOf==-1且!set.contains),则是我们要找的,返回下标,否则把该字符添加进Set,最后没有找到则返回-1。
解题代码
class Solution {
public int firstUniqChar(String s){
HashSet<Character> set=new HashSet<Character>();
for(int i = 0;i<s.length();i++){
if(s.indexOf(s.charAt(i),i+1)==-1&&!set.contains(s.charAt(i))){
return i;
}else{
set.add(s.charAt(i));
}
}
return -1;
}
}
lastIndexOf
后续发现如果利用lastIndexOf方法,会简单很多:
class Solution{
public static int firstUniqChar(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.lastIndexOf(s.charAt(i)) == s.indexOf(s.charAt(i))) {
return i;
}
}
return -1;
}
}