【ルーキートレーニング】ソードとはオファー50のことです。最初に登場するキャラクターは1回だけです。

タイトル説明:

文字列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"));

    }
}

おすすめ

転載: blog.csdn.net/Puppet__/article/details/115196012