没啥难度的一道题,要注意把数组开大一点,我因为这个RE了很多次。思路主要有两种:
- 用主串t与子串属相匹配。
- 用子串s与主串t相匹配。
题目链接:UVa 10340
AC代码如下:
第一种思路:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s, t;
while (cin >> s >> t) {
int len1 = s.length(), len2 = t.length(), count=0;
for (int i = 0; i < len2; i++) {
if (t[i] == s[count]) {
count++;
if (count == len1)
break;
}
}
if (count == len1)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
第二种思路:
#include <iostream>
#include <string>
#include <string.h>
#define maxn 10000000
char s[maxn], t[maxn];
using namespace std;
int main() {
while (cin >> s >> t) {
int len1 = strlen(s), len2 = strlen(t), count = 0, n = 0;
if (len2 < len1) { //主串的长度应该大于子串
cout << "No" << endl;
continue;
}
for (int i = 0; i < len1; i++) {
for (int j = n; j < len2; j++)
if (s[i] == t[j]) {
count++;
n = j + 1; //因为字母顺序不能改变,主串中的字符匹配到后要从它后面的字符继续比较
break;
}
if (count == 0) //如果第一个字母都没匹配到就直接跳出循环
break;
}
if (count == len1)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}