360笔试题,字符串s通过复制能不能得到字符串t

笔试的时候题目要求没看清楚,然后导致想法都是错的,然后下来之后又做了一遍,不知道有没有考虑不足的地方,大佬们帮我看看,感谢

题目描述: 小明最近学会了快捷键Ctrl CCtrl V。具体来说,给她一个字符串,
她复制其中的一个字符并将其粘贴到这个字符的下一位,从而整个字符串的长度加一。
小树来检测她的学习成果。他给出两个字符串 st,小明可以对 s 进行任意次复制粘贴操作,请问她能否将 s 转化成 t   输入描述 本题采用多组数据测试,第一行为数据组数T。在接下来的每组数据中(1<=T<=100)第一行有一个非空字符串 s,第二行有一个非空字符串 t 。
字符串中均为小写字母,所有测试数据的 s 的长度之和与 t 的长度之和都不超过106 输出描述 对于每组数据输出一行,如果可以转化输出YES,否则输出NO  样例输入 4 hello hello hello helloo hello hlllloo hello helo 样例输出 YES Y
ES NO NO
import java.util.*;
public class Main{

    public static void main(String args[]){
        Solution solution = new Solution();
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        String[] s = new String[num];
        String[] t = new String[num];
        for(int i = 0;i<num;i++){
            s[i] = sc.next();
            t[i]= sc.next();
        }
        for (int i = 0;i<num;i++){
            System.out.println(solution.fun(s[i],t[i]));
        }


    }
}
class Solution{

    public String fun(String s,String t){
        //如果第一个字符串比第二个长返回NO
        if(s.length()>t.length()){
            return "NO";
        }
        //如果两个字符串相等返回YES
        if(s.equals(t)){
            return "YES";
        }
        //首先判断如果第一位都不相等,那么通过复制肯定不会相同直接返回NO
        if (s.charAt(0)!=t.charAt(0)){
            return "NO";
        }

        //指针1指向字符串1
        int slow = 1;

        //指针2指向字符串2
        int fast = 1;
        //遍历字符串2
        //abc
        //aaabc
        while(fast<t.length()){//这边不能使用for循环,因为fast指针不一定每次都加一,所以如果采用for循环,会导致没遍历完字符串循环就结束了

            //如果s[slow]等于t[fast],两个都往后移一位
            if (s.charAt(slow)==t.charAt(fast)){
                //如果第一个已经移到头那么slow就不能继续++,slow应该固定为s.length()-1
                if (slow>=(s.length()-1)){
                    slow = s.length()-1;
                }else{
                    slow++;
                }

                fast++;

            }else if(s.charAt(slow)!=t.charAt(fast)&&s.charAt(slow-1)==t.charAt(fast)){ //如果s中当前字符不等于t当前字符,但是s当前字符前一位等于t当前字符,
                //那么将slow-1
                slow--;
            }else {//如果走到这里说明s当前字符不等于t当前字符,并且前一个字符也不等于t当前字符,那么便无法通过复制使得s与t相同,返回NO
                //abcab
                //aabbccaabbcc

                return "NO";
            }
        }


        return "YES";

    }
}


#360笔试#
全部评论
希望大佬们帮我看看有没有哪里不对的
点赞 回复 分享
发布于 2022-09-24 18:16 河南

相关推荐

这一集&nbsp;硕士输的很惨
HoePointer:普通硕士的悲哀,高的进不去,低的要不起
点赞 评论 收藏
分享
有担当的灰太狼又在摸鱼:零帧起手查看图片
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务