Likou389。違いを見つける-ハッシュテーブルのアイデアの最適化プロセス

389.違いを見つける

2つの文字列sとtが与えられた場合、それらには小文字のみが含まれます。

文字列tは文字列sによってランダムに再配置され、文字がランダムな位置に追加されます。

tに追加された文字を見つけてください。

例1:

入力:s = "abcd"、t = "abcde"
出力: "e"
説明:「e」は追加された文字です。
例2:

入力:s = ""、t = "y"
出力: "y"
例3:

入力:s = "a"、t = "aa"
出力: "a"
例4:

入力:s = "ae"、t = "aea"
出力: "a"

提示:
0 <= s.length <= 1000
t.length == s.length + 1
s 和 t 只包含小写字母

回答:

直感的には、ハッシュテーブルを使用して各配列文字の出現回数を格納し、出現回数を1つずつ比較できます。つまり、2つのハッシュテーブルを使用できます。1つのハッシュテーブルのみを使用して、配列は「保存」され、t配列は「削除」されます。

コード:

char findTheDifference(char * s, char * t){
    
    
    int hash[26]={
    
    0};
    for(int i=0;i<strlen(s);i++)
    {
    
    
        hash[s[i]-'a']++;
    }
    for(int i=0;i<strlen(t);i++)
    {
    
    
        hash[t[i]-'a']--;
    }
    char temp;
    for(int i=0;i<26;i++)
    {
    
    
        if(hash[i]==-1)
        {
    
    
            temp = i+'a';
            return temp;
        }
    }
    return 1;
}

後で、最適化できるので、「保存」して「削除」してから比較する必要がないことがわかりました。削除できる場合は、比較処理を行ってください。違いが見つかったら、すぐに飛び出すことができます。また、これにより中間変数の温度も節約されます。

コード:

char findTheDifference(char * s, char * t){
    
    
    int hash[26]={
    
    0};
    for(int i=0;i<strlen(s);i++)
    {
    
    
        hash[s[i]-'a']++;
    }
    for(int i=0;i<strlen(t);i++)
    {
    
    
        hash[t[i]-'a']--;
        if(hash[t[i]-'a']==-1)
        {
    
    
             return t[i];
        }
    }
    return 1;
}

おすすめ

転載: blog.csdn.net/xiangguang_fight/article/details/112547957