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

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

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;     } };

全部评论

相关推荐

07-11 22:27
中南大学 Java
程序员牛肉:学历的话没问题。但是没问题的也就只有学历了。 其实你的整体架构是正确的,博客接着干。但是项目有点过于简单了。从后端的角度上讲,你这也就是刚入门的水平,所以肯定约面试够呛。 如果你要应聘后端岗位,那你第一个项目竟然是仿写操作系统。这个你要面试官咋问你。你一定要记住一点,你简历上写的所有的东西,都是为了证明你有能力胜任当前的岗位,而不是为了证明你自己会什么。 如果你只是浅浅的做几个项目,描述也都是烂大街。技术点也都是各种混水类的配置类需求,那你就不要幻想自己能走多远。一定要保持思考,保持学习。
点赞 评论 收藏
分享
07-19 13:28
长沙学院 Java
程序员小白条:你有面试就有希望,没面试自然就没希望,到时候就知道了,你问别人也没啥用处的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 17:13
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务