#include iostream #include string using namespace std; void checkIfSubsequence(const string s, const string t) { if (s.length() == 0) { cout"Yes"endl; } if (t.length() s.length()) { cout"No"endl; } else { int sBegin = 0; int tBegin = 0; int
#include <iostream>
#include <string>
using namespace std;
void checkIfSubsequence(const string & s, const string & t) {
if (s.length() == 0) {
cout<<"Yes"<<endl;
} if (t.length() < s.length()) {
cout<<"No"<<endl;
} else {
int sBegin = 0;
int tBegin = 0;
int slength = s.length();
int tlength = t.length();
for (; tBegin < tlength; tBegin++) {
// cout<<t[tBegin]<<" "<<s[sBegin]<<endl;
if (t[tBegin] == s[sBegin]) {
sBegin++;
if (sBegin == slength) {
cout<<"Yes"<<endl;
return;
}
}
}
cout<<"No"<<endl;
}
return;
}
int main() {
while(1) {
string s = "";
string t = "";
cin>>s>>t;
if (cin.eof()) {
return 0;
}
checkIfSubsequence(s, t);
}
}
C++ 16ms
水题, 没啥可说的。
就是判断一个字符串是不是另一个字符串的字串(注意的是, 不已经要求连续)。
思路很简单:
遍历字符串t, 然后和字符串s的某个字符进行比较(该字符是字符串s第一个没有被匹配的字符)。
直到t遍历完(如果s还没有匹配完则No)或者s匹配完(Yes).
要比匹配连续字串容易.
这个方法其实还可以进行优化:
记下t还有多少个字符没有遍历tl, s还有多少个字符没有匹配sl, 如果 sl > tl, 那么永远不可能匹配成功了, 直接NO.
这样在某些情况下可以大大减少运算次数.