第一个只出现一次的字符位置
题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,
并返回它的位置, 如果没有则返回 -1(需要区分大小写).
解题思路:
//解法一:
public class Solution {
public int FirstNotRepeatingChar(String str) {
char[] c=str.toCharArray();
int[] a=new int['z'+1];//注意+1,不然遇到你会下标过界异常。。
for(char d:c){
a[(int)d]++;//对数组中的每个字符数目进行记录
}
for(int i=0;i<c.length;i++){
if(a[(int)c[i]]==1){
return i;
}
}
return -1;
}
}
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
char[] c=str.toCharArray();
// 可以使用Hash表,key存储的是字符,value存储的是出现的次数
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < c.length; i++) {
// hash表中已经存在key
if (map.containsKey(c[i])) {
// 修改其value
int value = map.get(c[i]);// 根据key得到value
map.remove(c[i]);
map.put(c[i], value + 1);
} else {
map.put(c[i], 1);
}
}
// 插入完毕后依次搜索
for (int i = 0; i < c.length; i++) {
if (map.get(c[i]) == 1) {
return i;
}
}
return -1;
}
}