题解 | #字符流中第一个不重复的字符#

字符流中第一个不重复的字符

https://www.nowcoder.com/practice/00de97733b8e4f97a3fb5c680ee10720

#define ASCII_SIZE 128
#define NOT_APPEAR -1
#define REPEAT     -2

class Solution
{
private:
    // 存放当前输入字符位于字符流的索引
    int index;
    //记录每个ascii字符在字符流中的出现信息
    // NOT_APPEAR    (-1):  字符还没有出现过
    // REPEAT    (-2):  已经重复出现过了
    // ELSE     (>=0): 该字符在输入字符流中的索引
    vector<int> ascii;

public:        // Init     Solution()     {         index = 0;         ascii = vector<int>(ASCII_SIZE);         // 全部填充 NOT_APPEAR         generate(ascii.begin(), ascii.end(),            [](){                return NOT_APPEAR;           });     }     //Insert one char from stringstream     void Insert(char ch) {       index++;       
// NOT_APPEAR->记录索引->REPEAT       // 如果字符没有出现过,就记录出现位置的索引       if(ascii[ch] == NOT_APPEAR){         ascii[ch] = index;        }       // 若出现过,则标记出现过了       else if(ascii[ch] >= 0){         ascii[ch] = REPEAT;       }     }     //return the first appearence once char in current stringstream     char FirstAppearingOnce() {       int _index = INT32_MAX; //存放最小的索引       int chCode = -1;     //存放索引对应的char       for(int i = 0; i < ASCII_SIZE; i++){         // 1.只出现过一次  2.遍历后保证索引最小         if(ascii[i] >= 0 && ascii[i] < _index){           _index = ascii[i];           chCode = i; //3.同时记录索引最小处的字符         }       }       if(chCode == -1){         return '#';       }       return (char)chCode;     } };

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务