题目
给定两个字符序列 a
和 b
,求 b
在 a
中出现的次数。a
中的每个字符只能出现在零个或一个 b
字符序列中,
每组字符序列 a
和 b
输入在一行中,以空格分隔。
如果遇见 # 字符,则不再进行工作。
示例:
输入
abcde a3 aaaaaa aa #
输出
0 3
解题思路
从头到尾遍历 a
,一旦遇到与 b
相符的序列,就计数 cnt
。
C++代码
#include<cstdio> #include<vector> using namespace std; int main(){ vector<char> a, b; char ch = getchar(); int flag = 1; while(1){ if(ch=='#') break; if(ch=='\n' || ch=='\r'){ flag = 1; int cnt = 0; int n = a.size(); int m = b.size(); for(int k=0; k<n && k<=n-m; ++k){ if(a[k]==b[0]){ int i=k+1; int j=1; while(j<m){ if(a[i]==b[j]){ ++i; ++j; } else break; } if(j==m){ ++cnt; k = i-1; } } } printf("%d\n", cnt); a.clear(); b.clear(); } else if(ch==' ') flag = 2; else if(flag==1) a.push_back(ch); else b.push_back(ch); ch = getchar(); } return 0; }