解题思路:
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 人评分
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:565 |
幸运数 (C++代码)浏览:1309 |
1017题解浏览:663 |
用筛法求之N内的素数。 (C语言代码)浏览:595 |
链表数据求和操作 (C语言代码)浏览:1035 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:725 |
矩阵的对角线之和 (C语言代码)浏览:1401 |
JAM计数法 (C语言代码)浏览:721 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:683 |
马拦过河卒 (C语言代码)浏览:1213 |