【题目】如上
【思路】可以设计一个新的int型数组,数组长度为26,与26个字母位置从0-25一一对应,输入哪个字母就在对应位置加1。最后在判断时,用指针访问的形式按顺序遍历字符串,根据该字母对应int型数组中的出现次数判断是否至少为k,形成子串。利用递归进行循环。
【代码】
#includeusing namespace std; void counting(char *,int *,int &,int &); int main() { int k=0; while(cin>>k) { char ch[256]; int count[26]={0};//重点:将26个字母在数组中一一对应地计数 int max=0; cin>>ch; for(int i=0;ch[i]!='';i++) { count[ch[i]-'a']++;//ch[i]-'a'是整型数,对应数组中的位置 } counting(ch,count,k,max); cout< =k) count++;//利用i遍历ch数组,如果该字符不超过k就退出循环,子串在此处断裂 else break; } if(count>=max) max=count; if(*(ch+i)=='') return;//如果读到了字符数组最后(系统自动加结束符)则返回 else counting(ch+i+1,p,k,max);//进入递归,ch指向断点的后一位,在此继续计数 }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)