解题思路:先扫一遍,把c1的下标存入vector数组,然后再从后往前扫一遍,当找到c2,并且c2的下标i>=k-1(保证字符串有那么长)时,用string的成员函数rfind从c2往左找第一个c1,再去vector里面找到这个c1原本的下标,这样就知道固定c2之后,合法的c1 有几个了
注意事项:
参考代码:
#include<bits/stdc++.h> using namespace std; string s; char c1,c2; int k; int ans; vector<int>v; int main(){ cin>>k; cin>>s>>c1>>c2; for(int i=0;i<s.size();i++){ if(s[i]==c1){ v.push_back(i); } } for(int i=s.size()-1;i>=0;i--){ // cout<<"i="<<i<<endl; if(s[i]==c2&&i>=k-1){ int pos=s.rfind(c1,i-k+1); for(int j=0;j<v.size();j++){ if(pos==v[j]){ ans+=j+1; break; } } } } cout<<ans; return 0; }
0.0分
0 人评分
陶陶摘苹果 (C语言代码)浏览:1606 |
C二级辅导-等差数列 (C语言代码)浏览:1216 |
Biggest Number (C++代码)回溯法浏览:1614 |
C语言程序设计教程(第三版)课后习题8.9 (Java代码)浏览:1335 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:672 |
【金明的预算方案】 (C++代码)浏览:940 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:786 |
1642题解浏览:715 |
关于C语言变量位置的问题浏览:272 |
图形输出 (C语言代码)浏览:1387 |