codeforces Round #568 div2-02

题意:

       给出一个实际输出的字符串,由于在键盘输入目标字符串的过程中可能存在一个字母输入多次的可能,所以需要确认该实际输出的字符串是否是在敲打目标字符串的过程中可能敲打出来的。

思路:

       将目标字符串作为匹配对象,用实际输出的字符串依次做比较:

       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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值