小小蒟蒻的菜鸟题解,希望各位大佬不要嫌弃
思路就是简单的模拟滑动窗口,下方代码有详细注解
感觉对初学者可能更好理解一点
但是本蒟蒻觉得判断字符串中是否有重复字符串的函数略显复杂,不知各位大佬有何更好办法,希望各位大佬可以留言让本蒟蒻学习一下
class Solution { public: bool V(string a){ //若不是字符串的首尾字符相同,则判断字符串中是否有重复字符; for(int i=0;i<a.size();i++){ int t=0; for(int j=0;j<a.size();j++){ if(a[i]==a[j]){ t++; } } if(t>1){ return true; } } return false; } int numKLenSubstrRepeats(string s, int k) { // write code here int n=s.size(),r=0,l=0,Max=0; string a=""; while(r<n){ if(r-l+1==k){ //若字符串长度达到k值,则进入判断; if(a.find(s[r])!=-1||V(a)){ //字符串中有重复的字符,则Max加一; Max++; } a.erase(a.begin()); //不论有无重复字符,字符串都应该变短,使窗口变小,删除第一个元素; l++; //窗口左边界加一,窗口变小; } a+=s[r];//字符串增加; r++;//窗口向右变大; } return Max; } };
弱弱地说一句:求......赞赞可以吗