【53】字符流中第一个不重复的字符

来源:互联网 发布:新网域名转入万网 编辑:程序博客网 时间:2024/05/21 17:13

【53】字符流中第一个不重复的字符

  • 参与人数:2256
  • 时间限制:1秒
  • 空间限制:32768K
  • 本题知识点: 字符串

题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。
当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。

输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
牛客网题目链接:点击这里


VS2010代码

#include<iostream>#include<vector>using namespace std;class Solution{    vector<char> Strings;    vector<int> Nums;public:  //Insert one char from stringstream    void Insert(char ch)    {        if(Strings.empty())  //第一个字符出现一次        {            Strings.push_back(ch);            Nums.push_back(1);        }        else        {    //先检验当前是否已有            int i=0;            for(; i!=Strings.size(); i++)            {   //若之前已存在,记录数量                if(Strings[i]==ch)                 {                    Nums[i]++; break;                }            }            if(i==Strings.size()) //若未在前面找到            {                Strings.push_back(ch);                Nums.push_back(1);            }        }    }  //return the first appearence once char in current stringstream    char FirstAppearingOnce()    { // 遍历记录表中,        if(Nums.empty()) return '#';        for(int i=0; i!=Nums.size(); i++)        {            if(Nums[i]==1)                return Strings[i];        }        return '#';    }};int main(){    Solution s1;    char* test="google";    s1.Insert(test[0]);    cout<<s1.FirstAppearingOnce()<<endl;    s1.Insert(test[1]);    cout<<s1.FirstAppearingOnce()<<endl;    s1.Insert(test[2]);    cout<<s1.FirstAppearingOnce()<<endl;    s1.Insert(test[3]);    cout<<s1.FirstAppearingOnce()<<endl;    s1.Insert(test[4]);    cout<<s1.FirstAppearingOnce()<<endl;    s1.Insert(test[5]);    cout<<s1.FirstAppearingOnce()<<endl;}

—————————

标准思路为:
采用 关联容器 map;一组(key,value)对应的数据。
或者 使用 哈希表的 key-value 这种对应

牛客网通过图片:
这里写图片描述
这里写图片描述

0 0
原创粉丝点击