《劍指offer》編程-第一次只出現一次的字符

題目描述:

在一個字符串(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;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章