剣はオファーを指します--------一度だけ現れる最初のキャラクター

ここに画像の説明を挿入します

トピックリンク

アイデア:
この質問では、マップコンテナを直接使用して解決できます。それでもスペースと時間の効率を追求する場合は、文字列に含まれる小文字が26文字しかないため、ハッシュアルゴリズムを自分で実装し、配列を使用できます。各要素の数を記録するch []

  1. まず、要素値を-1に設定します
  2. 次に、文字列をトラバースします。要素に対応するch配列の値が-1の場合、それは以前に表示されていないことを意味するため、この時点で、ch []要素の値を文字列に対応する添え字に設定します。 0以上の場合は、以前に表示されたことを意味します。この時点で、ch []要素の値を-2に設定します(区別される場合)。
  3. ch []配列をトラバースし、-2、-1要素を無視し、変数を使用して配列の最小値を記録するだけです。

コード:

class Solution {
    
    
public:
    char firstUniqChar(string s) {
    
    
        char ch=' ';
        if(s.size()==0) return ch;
        map<char,int> mp;
        for(auto &i:s){
    
    
            mp[i]++;
        }
        for(auto &i:s){
    
    
            if(mp[i]==1){
    
    
                return i;
            }
        }
        return ch;
    }
};

//代码二

class Solution {
    
    
public:
    char firstUniqChar(string s) {
    
    
        char op = ' ';
        if(s.size()==0) return op;

        int ch[27];
        for(int i=0;i<27;++i){
    
    
            ch[i] = -1;
        }
        int ans = INT_MAX;

        for(int i=0;i<s.size();++i){
    
    
            int idx = s[i] - 'a';
            if(ch[idx]==-1){
    
    
                ch[idx] = i;
            }else if(ch[idx]>=0){
    
    
                ch[idx] = -2;
            }
        }

        for(int i=0;i<27;++i){
    
    
            if(ch[i]>=0){
    
    
                ans = min(ans,ch[i]);
            }
        }
        if(ans==INT_MAX) return ' ';
        else return s[ans];

    }
};

おすすめ

転載: blog.csdn.net/weixin_43743711/article/details/114525047