【剣指offer-Java版】35初めて一度しか現れない文字
2955 ワード
最初の文字は一回だけ現れます。与えられた文字に対して、繰り返して、そしてそれを一つのhashテーブルにマッピングして、遍歴が完了した後、ハッシュテーブルを巡回します。出会った最初のハッシュ値は1に対応する文字です。最初の文字は一回だけ現れた文字です。
public class _Q35<T> {
public char FirstNotRepeatingChar(char chars[]){
if(chars == null) return '\0'; // java
int hash[] = new int[256];
for(int i=0; i<chars.length; i++){
hash[chars[i]]++;
}
int resultIndex = 0;
for(int i=0; i<chars.length; i++){
if(hash[chars[i]] == 1){
resultIndex = i;
break;
}
}
if (resultIndex != 0) {
return chars[resultIndex];
} else {
return '\0';
}
}
}
テストコード:
public class _Q35Test extends TestCase {
_Q35 firstNoRepeat = new _Q35();
public void test(){
String str1 = "abaccdeff";
String str2 = "aaaacba";
String str3 = "";
String str4 = "abcabc";
System.out.println(firstNoRepeat.FirstNotRepeatingChar(str1.toCharArray()));
System.out.println(firstNoRepeat.FirstNotRepeatingChar(str2.toCharArray()));
System.out.println(firstNoRepeat.FirstNotRepeatingChar(str3.toCharArray()));
System.out.println(firstNoRepeat.FirstNotRepeatingChar(str4.toCharArray()));
}
}