例如,String s = "abdcab",第一个出现一次的字符是d。
法1:
对于每一个元素,从头开始遍历有没有重复的,两重for循环。
法2:
从第一个元素开始,我查找此元素后面的每一个元素,如果重复,则将这些重复的设为‘\n’,这样我就不用判断这些为‘\n’的元素了,如果没有则肯定是第一次出现的,记住要设置标志位。
public static char find(String s)
{
char key = '\n';
char[] ch = s.toCharArray();
int i = 0, j = 0;
for(i = 0; i < ch.length; i++)
{
char now = ch[i];
boolean flag = false;
if(now != '\n')
{
for(j = i + 1; j < ch.length; j++)
{
if(ch[j] == now)
{
flag = true;
ch[j] = '\n';
}
}
if(!flag)
return now;
}
}
return key;
}
法3:利用LinkedHashMap,统计次数。
public static char find(String s)
{
char key = '\n';
char[] ch = s.toCharArray();
LinkedHashMap<Character,Integer> map = new LinkedHashMap<Character,Integer>();
Set<Character> set = map.keySet();
int i = 0, j = 0;
for(i = 0; i < ch.length; i++)
{
if(set.contains(ch[i]))
{
j = map.get(ch[i]);
j++;
map.put(ch[i],j);
}
else
map.put(ch[i], 1);
}
for(Map.Entry<Character, Integer> entry : map.entrySet())
{
key = entry.getKey();
int value = entry.getValue();
if(value == 1)
return key;
}
return key;
}
法4:利用HashMap
public static Character findFirst(String s) { if(s == null) return null; char[] ch = s.toCharArray(); Map<Character,Integer> map = new HashMap<Character,Integer>(); for(int i = 0; i<ch.length; i++) { if(map.get(ch[i])==null) { map.put(ch[i], 1); } else { int count = map.get(ch[i]); count++; map.put(ch[i], count); } } for(int i = 0; i<ch.length; i++) { if(map.get(ch[i])==1) { return ch[i]; } } return null; }