题意:
给出一个实际输出的字符串,由于在键盘输入目标字符串的过程中可能存在一个字母输入多次的可能,所以需要确认该实际输出的字符串是否是在敲打目标字符串的过程中可能敲打出来的。
思路:
将目标字符串作为匹配对象,用实际输出的字符串依次做比较:
if(相同){
两个字符串的比较起点都后移;
} else{
if(当前比较是第一个点){
不符合条件,并结束比较;
}
if(实际输出的字符串后一点的字符和前一点相同){
视为重复输入了,则实际输出的字符串的比较起点后移一位,目标字符串起点不变,继续比较;
}
}
代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
int i, n, index_1,index_2,length_1,length_2;
bool res_ok;
string s,t;
while(cin >> n){
while(n--){
//每次输入相关数据的初始化
cin >> s >> t;
index_1 = 0;
index_2 = 0;
res_ok = true;
length_1 = s.length();
length_2 = t.length();
if(length_2 < length_1){
cout << "NO" << endl;
continue;
}
while(index_1 < length_1 || index_2 < length_2){
if(s.substr(index_1,1) == t.substr(index_2,1)){
index_1++;
index_2++;
} else{
if(index_2 == 0) { //第一位就不相等则确定不相等
res_ok = false;
break;
}
if(t.substr(index_2,1) == t.substr(index_2-1,1)){ //cout << "后者连续输入了" << endl;
index_2++;
}else{ //cout <<"确定不再相等" << endl;
res_ok = false;
break;
}
}
}
if(res_ok && index_1 == length_1 && index_2 == length_2) {
cout << "YES" <<endl;
} else{
cout << "NO" << endl;
}
}
}
return 0;
}