java-17-在一个字符串中找到第一个只出现一次的字符


public class FirstShowOnlyOnceElement {

	/**Q17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
	 * 1.int[] count:count[i]表示i对应字符出现的次数
	 * 2.将26个英文字母映射:a-z <--> 0-25
	 * 3.假设全部字母都是小写
	 */
	public static void main(String[] args) {
		String str="abaccdeff";
		int index=find(str);
		if(index!=-1){
			char firstShowOnlyOnceElement=str.charAt(index);//charAt() source code:return value[index + offset];
			System.out.println(firstShowOnlyOnceElement);
		}
		
	}

	//return the index of firstShowOnlyOnceElement
	public static int find(String str){
		if(str==null||str.length()==0){
			return -1;
		}
		int len=str.length();
		char[] letters=str.toCharArray();
		//In java,'char' is 16 bits,so there are 2^16 characters.
		//But we deal with only the 26 English letters in this case.
		int[] count=new int[26];//the 'HashTable'
		for(int i=0;i<len;i++){
			char curChar=letters[i];
			count[curChar-'a']++;
		}
		for(int i=0;i<len;i++){
			char curChar=letters[i];//iterate the string,not the HashTable
			if(count[curChar-'a']==1){
				return i;
			}
		}
		return -1;
	}
}

你可能感兴趣的:(java)