暴力通过55%
使用set存放(过滤相同的元素)访问过的元素
判断set中个数,如果大于k那么更新当前元素
#include<iostream>
#include<string>
#include<vector>
#include<set>
using namespace std;
int process(string str, int k) {
set<char>visited;
int count = 0;
string res = "";
for (int i = 0; i < str.size(); ++i) {
if (visited.find(str[i]) == visited.end()) {//如果没有访问过,直接加入set中
visited.insert(str[i]);
}
string temp = "";
temp += str[i];
for (int j = i + 1; j < str.size(); ++j) {
if (visited.find(str[j]) == visited.end()) {
visited.insert(str[j]);
}
if (visited.size() <= k) {//如果里面存放的元素个数小于等于k,继续
temp += str[j];
res = res.size() > temp.size() ? res : temp;
}
else {//否则清空之
visited.clear();
break;
}
}
}
return res.size();
}
int main() {
int n;
string input_str;
while (cin >> n>>input_str) {
int res = process(input_str, n);
cout << res << endl;
}
}
想到了再补充。。。