题目

给定两个字符序列 ab,求 ba 中出现的次数。a 中的每个字符只能出现在零个或一个 b 字符序列中,
每组字符序列 ab 输入在一行中,以空格分隔。
如果遇见 # 字符,则不再进行工作。

示例:
输入

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;
}