題目描述:
在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫).
分析:
本題就是對一個給定的字符串找出第一個只出現一次的字符
要點:
1.只出現一次的字符 2.第一次出現 3.只由字母組成 4.區分大小寫
思路:
因爲字符串全是字母構成,因此對字符串中的字母進行頻次統計時,可以構建26個字母專屬的數組,(這裏有一個坑,那就是區分大小寫,就是得分別對大小寫字母進行統計判別),① 對每個字母進行頻次統計,並存放在數組中。② 然後再對字符串進行遍歷,對每個遍歷到的字母,到對應的字母頻次數組中進行查詢,如果出現頻次爲1,則立即返回其在字符串中的位置。
這裏對於區分大小寫的字母,我的做法是聲明兩個int[26]的數組,一個存放大寫字母,另一個存放小寫字母。
注意小寫字母的ASCII值 是大於 大寫字母的ASCII值的,因此比較時限定區間如“A~Z”比較穩妥。
代碼:
public class Solution {
public int FirstNotRepeatingChar(String str) {
int len = str.length();
int fre[] = new int[26];
int bfre[]=new int[26];
int i = 0;
int total = -1;
while (i <= len - 1) {
char tmp = str.charAt(i);
if (tmp>='A'&&tmp<='Z') {
bfre[tmp - 'A']++;
}
else {
fre[ tmp - 'a']++;
}
i++;
}
for (int j = 0; j < len; j++) {
char tmp = str.charAt(j);
if (tmp>='A'&&tmp<='Z') {
if (bfre[tmp - 'A'] == 1) {
return j;
}
} else {
if (fre[tmp - 'a'] == 1) {
return j;
}
}
}
return total;
}
}