题目:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
知识点:
1、在ArrayList<Character>中移除char[i]时,需要将char[i]转为Character,因为将char[i]存入ArrayList<Character>时,会自动封箱;删除时若不转,会报java.lang.IndexOutOfBoundsException: Index: 111, Size: 2错误,在Character的ArrayList找不到char。
思路:
将String转为char进行判断;建立两个ArrayList数组,al用于保存没出现过的字符,alTmp用于保存出现过的字符;遍历char数组,al和alTmp中没有就加到al中,al中有则在删除,同时在alTmp中添加(防止在al中出现过,又被删除了,误认为没出现过的字符,例如:google中的g),最终al中第一个元素就是答案。
答案:
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
if(str.length()==0){return -1;}
char[] chr = str.toCharArray();
ArrayList<Character> al = new ArrayList<Character>();
ArrayList<Character> alTmp = new ArrayList<Character>();
for(int i=0;i<chr.length;i++){
if((!al.contains(chr[i]))&&(!alTmp.contains(chr[i]))){
al.add(chr[i]);
}else{
if(al.contains(chr[i])){
al.remove((Character)chr[i]);//转为Character
}
alTmp.add(chr[i]);
}
}
if(al.isEmpty()){return -1;}
return str.indexOf(al.get(0));
}
}