测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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的子序列(顺序匹配)。

上一题 下一题