给定两个字符串,要求判断后一个字符串是否是前一个字符串或者前一个字符串的反串经过裁剪得到的子字符串。
题目不难,正向比较一次,反向比较一次即可。
//By:一只大幽灵
//Time:2012/4/11
#include <iostream>
#include <cstring>
using namespace std;
class Subsequence {
public:
void in();
bool sub();
private:
char s1[101], s2[101];
};
bool Subsequence::sub() {
int len1 = strlen(s1);
int len2 = strlen(s2);
int s = 0, t = 0;
int f = 0;
if (len2 > len1)return false;
for (int i = 0; i < len2; i++) {
f = 0;
for (int j = t; j < len1; j++) {
if (s1[j] == s2[i]) {
s++;
t = j + 1;
f = 1;
break;
}
}
if (s == len2)return true;
else if (f == 0)break;
}
s = 0;
t = 0;
for (int i = len2 - 1; i >= 0; i--) {
f = 0;
for (int j = t; j < len1; j++) {
if (s1[j] == s2[i]) {
s++;
t = j + 1;
f = 1;
break;
}
}
if (s == len2)return true;
else if (f == 0)break;
}
return false;
}
void Subsequence::in() {
int n;
cin >> n;
while (n--) {
cin >> s1 >> s2;
if (sub())cout << "YES" << endl;
else cout << "NO" << endl;
}
}
int main() {
Subsequence s;
s.in();
return 0;
}