编程实现:单词验证
题目描述:
小丁在学习英语单词时发现,某些单词如果删除若干字母后(不改变剩余字母的顺序)可得到另一个单词。现有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”,无论怎么删除都无法得到七,故输出 NO。
输入描述:
第一行输入一个正整数N(1≤N≤1000),表示数据组数:接下来N行,每行输入两个仅包含小写字母的字符串,分别表示初始单词s(1≤s的长度≤500)和目标单词t(1≤t的长度<500),字符串之问以一个空格开。输出描述:
共N行,每行输出一个字符串,如果能从初始单词s中除零个或多个字母得到目标单词t,输出"YES”,否则输出“NO"。
输入描述:
第一行输入一个正整数N(1≤N≤1000),表示数据组数:接下来 N行,每行输入两个仅包含小写字母的字符串,分别表示初始单词s(1≤s的长度≤500)和目标单词t(1≤t的长度<500),字符串之问以一个空格开。输出描述:
共N行,每行输出一个字符串,如果能从初始单词s中除零个或多个字母得到目标单词t,输出"YES”,否则输出“NO”。
good no
样例输入:
2
adventure avenue
good no
样例输出:
YES
NO
C++实现
#include <iostream>
#include <string>
using namespace std;
//判断删除n个字符后是不是目标单词
bool canValidate(string &t,string &s){
int i=0,j=0;
while(i<t.size() && j<s.size()){
if(t[i]==s[j]){
j++;
}
i++;
}
if(j==s.size()){
return true;
}else{
return false;
}
}
int main(){
int n;
string t,s;
cin>>n;
for(int i=0;i<n;i++){
cin>>t>>s;
if(canValidate(t,s)){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容