A25146. 单词验证
填空题
容易
知识点
题目描述
单词验证
题目描述:
小丁在学习英语单词时发现,某些单词如果删除若干字母后(不改变剩余字母的顺序)可得到另一个单词。
现有 N 组数据,每组数据中给定两个仅包含小写字母的字符串,表示初始单词 s 和目标单词 t,请判断对于每组数据,能否从 s 中删除零个或多个字母得到 t,如果能得到输出 "YES",否则输出 "NO"。
例如:
N = 2,两组数据如下:
1)s = "adventure",t = "avenue",删除 "adventure" 中的第 2、6、8 个字母可得到"avenue",故输出 YES;
2)s = "good",t = "no",无论怎么删除都无法得到 t,故输出 NO。
输入描述:
第一行输入一个正整数 N(1≤N≤1000),表示数据组数;
接下来 N 行,每行输入两个仅包含小写字母的字符串,分别表示初始单词 s(1≤s 的长度≤500)和目标单词 t(1≤t 的长度≤500),字符串之间以一个空格隔开。
输出描述:
共 N 行,每行输出一个字符串,如果能从初始单词 s 中删除零个或多个字母得到目标单词 t,输出"YES",否则输出 "NO"。
样例输入:
2
adventure avenue
good no样例输出:
YES
NO参考答案
#include <iostream>
#include <string>
using namespace std;
bool canForm(string s, string t) {
int i = 0, j = 0;
while (i < s.size() && j < t.size()) {
if (s[i] == t[j]) j++;
i++;
}
return j == t.size();
}
int main() {
int N;
cin >> N;
while (N--) {
string s, t;
cin >> s >> t;
cout << (canForm(s, t) ? "YES" : "NO") << endl;
}
return 0;
}答案解析
双指针遍历,检查t是否是s的子序列(顺序匹配)。
上一题
下一题