[AcWing] 3358. 放养但没有完全放养(C++实现)贪心
1. 题目
2. 读题(需要重点注意的东西)
思路(贪心):
读题意:
即给定两个字符串 S 和 T ,判断字符串 S 至少
存在多少次,使得存在子序列为 T
主要思路:
给定字符串S中的字符一个序列,如 0 1 2 …
然后遍历字符串T,判断当前字符 i 和上一个字符 i-1在字符串S中的序号大小,如果当前字符在字符串S中的序号大于上一个字符 i-1 在字符串S中的序号,则说明可以存在于同一段字符串S中,否则使得结果res+1。
3. 解法
-----------------------------------------------解法----------------------------------------------
#include<iostream>
#include<unordered_map>
using namespace std;
int main(){
// 初始要置为1,针对T全部为顺序排列的情况
int res = 1;
string a,b;
unordered_map<char,int> sn;
cin >> a >> b;
for(int i = 0;i < a.size(); i++) sn[a[i]] = i;
for(int i = 1; i < b.size(); i++){
if(sn[b[i]] <= sn[b[i-1]]) res++;
}
cout << res << endl;
return 0;
}
可能存在的问题