タイトル説明:
文字列sに1回だけ現れる最初の文字を見つけます。そうでない場合は、単一のスペースを返します。sには小文字のみが含まれます。
例:
s = "abaccdeff"
は "b"を返します
s = ""
Return ""
制限:
0 <= sの長さ<= 50000
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
著作権はLeetCodeが所有しています。商用転載の場合は、公認機関にご連絡ください。非商用転載の場合は、出典を明記してください。
問題解決のアイデア:
ハッシュ+コレクション。タイトルの要件に応じて、1回だけ出現する最初の文字を見つける必要があります。これにより、ハッシュを使用して1回だけ出現する文字を見つけることができ、残りは最初の文字を見つける方法を解決するだけで済みます。ここでは、ハッシュ配列の値が1の文字をセットセットに追加し、指定された文字列sに対して前から後ろにループを実行します。セット内にある場合は、これが最初の文字であることを意味します。 1つとループを終了します。出力。
ここには英語の文字が26文字しかないため、ASCIIコードテーブルを介して0〜25に配置できます。これにより、時間とメモリを節約できます。
コード:
public class jianzhi_Offer_50 {
public char firstUniqChar(String s) {
char ans = ' ';
if(s == "")
return ans;
int[] hashnum = new int[26];
for (int i = 0 ; i < s.length(); i++){
hashnum[s.charAt(i) - 'a']++;
}
Set set = new HashSet();
for (int i = 0; i < hashnum.length; i++){
if (hashnum[i] == 1){
set.add((char) (i + 'a'));
}
}
for (int i = 0; i < s.length(); i++){
if (set.contains(s.charAt(i))){
ans = s.charAt(i);
break;
}
}
return ans;
}
public static void main(String[] args) {
jianzhi_Offer_50 obj = new jianzhi_Offer_50();
System.out.println(obj.firstUniqChar("z"));
}
}