钟xxx


私信TA

用户名:dotcpp0661013

访问量:1538

签 名:

等  级
排  名 1473
经  验 2747
参赛次数 0
文章发表 23
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
FILO的思想,大概率使用栈来计算。利用栈将第一个值来进行一次加入,看看每次in之后是否符合出车的状况,如果符合就改变top的值,类似出栈
注意事项:
输出数组的索引j严格等于2n,只有满了才说明符合条件,不满那就肯定是不对。同时通过的车的数量不等于已有车的数量,要注意
参考代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            String o1 = scanner.next();
            String o2 = scanner.next();
            int flag = 1;
            char[] stack = new char[n]; // o1模拟栈
            String[] l = new String[2 * n]; // in还是out的表示
            int top = -1, j = 0, i = 0; // top表示栈顶,j是输出内容的索引,i是o2的索引
            for (int k = 0; k < n; k++) {
                // 为啥是i % o1.length(),这个说明n可能是要大于o1的长度的,所以要取余,比如4,123,那么进入的顺序其实是123 1
                stack[++top] = o1.charAt(k % o1.length()); // 将o1的第n个字符入栈,同时栈顶指针加一,实时更新栈顶
                l[j++] = "in"; // 表示入栈,汽车进入车站
                while (top >= 0 && stack[top] == o2.charAt(i % o1.length())) { //
                    // top >= 0 表示栈不为空,stack[top] == o2.charAt(i) 表示栈顶元素和o2的第i个元素相等
                    // 初始时i为0,表示o2的第一个元素,如果栈顶元素和o2的第一个元素相等,那么就出栈
                    // 那么下次与o2的第二个元素比较,如果相等,那么就出栈,以此类推
                    top--; // 栈顶元素出栈
                    i++; // o2的索引加一
                    l[j++] = "out"; // 表示出栈
                }
            }
            // 为啥是j 严格等于 2 * n,因为最后的输出是2 * n个,比如123,321,那么最后的输出是in in in out out out
            // 反正就是当输出数组没满的时候,就说明啥,说明其实是不可以的.因为如果一出一进,j必然是能满足2n
            // 如果中途缺少东西了,那么说明实际上是不可以的
            if (j != 2 * n) {
                flag = 0;
                System.out.println("No.");
            }
            if (flag == 1) {
                System.out.println("Yes.");
                for (String value : l) {
                    System.out.println(value);
                }
            }
            System.out.println("FINISH");
            System.out.println(j);
        }
    }
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区