题目
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路
最简单的想法就是倒序保存已经遍历过的所有字符,然后每次从中找只刚出现的字符,但是一旦重复很难返回前一个只出现一次的字符。
为了解题简单,可以使用链表存储,从前往后找。当没有遍历过这个字符时就保存在链表中,否则将重复的字符删除且不再存储当前字符。需要注意的是,当有三个(奇数)相同字符时,重复字符仍然有可能出现在最后的答案链表中。因此当存入字符时还需要判断该字符在原字符串中第一次出现的位置是否为当前遍历的位置。
记住常用方法的使用
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) {
String str= "googgle";
System.out.println(FirstNotRepeatingChar(str));
}
public static int FirstNotRepeatingChar(String str) {
if(str == null || str.length() <= 0)
return -1;
ArrayList<Character> list = new ArrayList<Character>();
for(int i=0; i<str.length(); i++) {
Character ch = str.charAt(i);
if(!list.contains(ch) && str.indexOf(Character.valueOf(ch)) == i) {
list.add(ch);
}else {
list.remove(ch);
}
}
if(list.size() <= 0) return -1;
return str.indexOf(list.get(0));
}
}
如有错误或不合理的地方,敬请指正~
加油!!