输入一个较长的字符串S和一个较短的字符串T,计算在S每个字符之前(包括当前字符)T出现的次数,并将其输出。
输入用例:ababac
输出用例:011222
解题思想:动态规划
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
string s, t;
cin >> s >> t;
int len_s = s.size();
int len_t = t.size();
vector<int> dp(len_s + 1, 0);
for (int i = 0; i < len_s; i++) {
int j = 0, k = i - len_t + 1;//从字符串S下标为k的地方开始比较
while (j < len_t && k >= 0 && k < len_s && s[k] == t[j]) {
++j;
++k;
}
dp[i + 1] = j == len_t ? dp[i] + 1 : dp[i];//状态转移方程
}
for (int i = 1; i <= len_s; i++)
cout << dp[i] << " ";
system("pause");
return 0;
}