在做java相关的字符串问题时,遇到这行字符串各个字母出现的次数,大家都会联想到map,一个key对应一个value。其实也可以用数组去实现。这是在做剑指offer的第一个只出现一次的字符遇到的问题。看题。
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
代码:
public int FirstNotRepeatingChar(String str) {
int[] cnts = new int[256];
for (int i = 0; i < str.length(); i++)
cnts[str.charAt(i)]++;
for (int i = 0; i < str.length(); i++)
if (cnts[str.charAt(i)] == 1)
return i;
return -1;
}
代码讲解:
ascll一共256位,设一个长度为256的整型数组,然后遍历字符串,遇到对应字符就++。思想就像索引为key,也是map的思想,但是降低了空间复杂度。
举个栗子
public static void main(String[] args) {
int [] a = new int[255];
a['b'] = 1;
a['a'] =2;
System.out.println(a['b']);
}
这样对处理字符串会很容易