c语言问题 给定一个字符串(长度小于等于100),要求输出没有重复字符的最长的子串。

给定一个字符串(长度小于等于100),要求输出没有重复字符的最长的子串。

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include <vector>
#include<string>
#include<sstream>
#include<map>
#include<set>
#include <functional> // std::greater
using namespace std;

int getCommon(string s1, string s2)
{
    int i = 0;
    for (; i < s1.size()&& i<s2.size(); ++i)
    {
        if (s1[i] != s2[i])
            break;
    }
    return i;
}

int main()
{
    string str;
    cin >> str;
    vector<string> strs;
    for (int i = 0; i < str.size(); ++i)
    {
        strs.push_back(str.substr(i));
    }
    sort(strs.begin(),strs.end());
    int maxlen = 0;
    string res;
    for (int i = 1; i < strs.size(); ++i)
    {
        int len = getCommon(strs[i-1], strs[i]);
        if (maxlen < len)
        {
            maxlen = max(maxlen, len);
            res = strs[i - 1].substr(0,len);
        }
    }
    cout << res<<"\n" << maxlen << endl;

    return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答