题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b';
import java.util.*;
public class Solution {
// 使用有序链表
public int FirstNotRepeatingChar1(String str) {
if (null == str || str.length() <=0){
return -1;
}
// 有序的map
LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
for (int i =0; i<str.length(); i++){
char c = str.charAt(i);
int index = i;
if (map.containsKey(c)){
index = -1;
}
// 如果多次出现,则value=-1;首次出现,则value=角标;
map.put(c, index);
}
int index = 0;
for(Map.Entry<Character,Integer> kv: map.entrySet()){
if (kv.getValue() != -1){
return kv.getValue();
}
}
return -1;
}
// 使用hash的方式
public int FirstNotRepeatingChar2(String str) {
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0; i<str.length(); i++){
char ch = str.charAt(i);
int count =1;
if(map.containsKey(ch)){
count += map.get(ch);
}
map.put(ch, count);
}
for(int i=0; i<str.length(); i++){
char ch = str.charAt(i);
int value = map.get(ch);
if (value ==1){
return i;
}
}
return -1;
}
}