最长不重复子串 C++

class Solution1
{
public:
    /*********************************************
    *函数功能:最长不重复子串
    *参数说明
    *    输入:
    *    输出:
    *时间复杂度:O( n) 空间复杂度 O( )
    *日期:      2018-07-24-00.15
    ***********************************************/
    string no_redup(string str)
    {
        if(str.size()<1) return "";
        int mp[256]={0};
        int begins=0;
        string word="";
        string longest_word="";
        for(int i=0;i<str.size();i++)
        {
            mp[str[i]]++;
            if(mp[str[i]]==1)
            {
                word+=str[i];
                if(word.size()>longest_word.size())
                {
                    longest_word=word;
                }
            }else
            {
                while(i>begins && mp[str[i]]>1)
                {
                    mp[str[begins]]--;
                    begins++;
                }
                word="";
                for(int k=begins;k<=i;k++)
                {
                    word+=str[k];
                }
            }
        }
        return longest_word;
    }
};

int main()
{
    Solution1 s;
    string result;
    string str="abcdefgegcsgcasse";
    result=s.no_redup(str);
    cout<<result<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值