这道题是求一个字符串是不是另一个字符串的子序列。刚开始是用DP写的,发现想复杂了,TLE。其实只用对s中的字符一个个在t中找,找到了就找下一个。在这个过程中s和t都不回头。
1936 | Accepted | 360K | 16MS | C++ | 1027B |
/*
ID: thestor1
LANG: C++
TASK: poj1936
*/
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <limits>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cassert>
using namespace std;
const int MAXM = 100000;
bool issubseq(char s[], char t[])
{
int m = strlen(s), n = strlen(t);
if (m > n)
{
return false;
}
int i, j;
for (i = 0, j = 0; i < m && j < n;)
{
if (s[i] == t[j])
{
i++;
j++;
}
else
{
j++;
}
}
return i == m;
}
int main()
{
// string s, t;
char s[MAXM + 1], t[MAXM + 1];
// while (cin >> s >> t)
while (scanf("%s%s", s, t) != EOF)
{
// cout << "s:[" << s << "], t:[" << t << "]" << endl;
if (issubseq(s, t))
{
// cout << "Yes" << endl;
printf("Yes\n");
}
else
{
// cout << "No" << endl;
printf("No\n");
}
}
return 0;
}