在做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']);
}
這樣對處理字符串會很容易