字符串中满足种类为k的最长子串

暴力通过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;
	}
}

想到了再补充。。。

发布了107 篇原创文章 · 获赞 125 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/Li_haiyu/article/details/100675648