第一次只出现一次的字符
在一个字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写,从0开始计数)
public class FindCharOfFirstTimes {
/**
* 方法1:
* 时间复杂度大,较繁琐。正常做法可以只用hashmap,只需要遍历两次字符数组就可以了
* LinkedList O(1)插入比ArrayList O(n)插入快。
* @param str
* @return
*/
public int FirstNotRepeatingChar(String str) {
HashMap<Character,Integer> hashMap = new HashMap<>();
List<Character> list = new LinkedList<>();
//将字符串转为字符数组
char[] arr = str.toCharArray();
for(int i = 0;i < arr.length;i++) {
if(!hashMap.containsKey(arr[i])) {
//字符没有出现过,将字符放入list中,再将字符存入hashmap中,
// 将其下标值存到相对应的value中。
list.add(arr[i]);
hashMap.put(arr[i],i);
} else {
//字符已出现过,在list中将重复元素删除
int index = list.indexOf(arr[i]);//找到字符出现的下标
if(index >= 0) {
list.remove(index);//删除字符
}
}
}
if(list.size() != 0) {
return hashMap.get(list.get(0));
}
return -1;
}
/**
* 方法2:
* 思路:如果一个字符只出现一次,那么它的那么它的indexOf与lastIndexOf就是相等的
* @param str
* @return
*/
public int FirstNotRepeatingChar2(String str) {
char strArray[]=str.toCharArray();
for(int i=0;i<str.length();i++){
if(str.indexOf(strArray[i])==str.lastIndexOf(strArray[i])){
return i;
}
}
return -1;
}
}