原题:输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串。例如,abcde可以得到bce,但无法得到dc。
解析:原有思路,逐个遍历t字符串0 ~ len(t),看是否存在i再0 ~ len(t)内使得满足题目条件,但时间复杂度远超解题要求。
不妨换种思路:
定义一个计数器cnt,外层for循环遍历t字符串,内部if判断s字符串是否存在该字符,若存在则cnt自加,内部j自加,出现t字符串或s字符串遍历到末尾的情况退出循环。判断计数器cnt是否等于s字符串的长度即可。
源码附下:
#include<iostream>
#include<string>
using namespace std;
int main(){
string s,t;
cin >> s >> t;
//cout<<s.size()<<'\t'<<t.size()<<endl;
int j=0, cnt=0;
for(int i=0; i<t.size(); i++){
if(t[i] == s[j] && j != s.size()){
cnt++;
j++;
}else if(j == s.size()) break;
else continue;
}
if(cnt == s.size()) cout<<"yes"<<endl;
else cout<<"no"<<endl;
return 0;
}