/**
* 编写一个高效率函数来找出一个字符串中第一个无重复字符.
* 例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2).函数调用模型如下:
* Public static Character FirstNoRepeated(String str);
*/
public class FirstNoRepeated {
public static void main(String[] args) {
System.out.println(FirstNoRepeated("total"));
System.out.println(FirstNoRepeated1("teeter"));
}
/**
* 利用map记录字符串中每个字符的个数
* @param str
* @return
*/
public static Character FirstNoRepeated(String str){
Map<Character,Integer> map = new HashMap<Character,Integer>();
for(int i=0; i<str.length();i++){
if(!map.containsKey(str.charAt(i))){
map.put(str.charAt(i), 1);
}else{
Integer k = map.get(str.charAt(i));
map.put(str.charAt(i), ++k);
}
}
//按字符串的顺序返回首次出现的字符
for(int i = 0 ; i < str.length(); i++){
if(map.get(str.charAt(i)) == 1){
return str.charAt(i);
}
}
return null;
}
/**
* 方式一:双重循环
* @param str
* @return
*/
public static Character FirstNoRepeated1(String str){
int count = 0;
char c;
//拿出每位中的每个字符与原字符串中的每个字符进行比较并记录出现的次数
for(int i=0;i<str.length();i++){
c = str.charAt(i);
for(int j=0;j<str.length();j++){
char cc = str.charAt(j);
if(c == cc){
count ++;
}
}
//返回首次出现的第一个字符
if(count == 1){
return c;
}
count = 0;
}
return null;
}
}