时间限制:5秒
空间限制:32768K
给定一个字符串,请找出其中长度最长且不含有重复字符的子串,计算该子串长度。
输入描述:
输入类型为字符串,例如”abcde“
输出描述:
输出类型为整型, 例如 5
输入例子1:
pwwkew
输出例子1:
3
例子说明1:
无重复字符的最长子串是"abc",其长度为 3
最简单的做法是穷举所有字串,然后直接用Map判断,时间复杂度O(N^3)
#include <iostream>
#include <algorithm>
#include <unordered_set>
#include <string>
using namespace std;
bool isrepat(string &str, int start, int end) {
unordered_set<char> mp;
for (int i = start; i <= end; i++) {
if (mp.find(str[i]) != mp.end())
return false;
mp.insert(str[i]);
}
return true;
}
int main()
{
string str;
unordered_set<char> mp;
cin >> str;
int n = str.size();
int res = 0;
for(int i=0;i<n;i++){
for (int j = i; j < n; j++) {
if (isrepat(str, i, j))
res = max(res, j - i + 1);
}
}
cout << res << endl;
}