解题思路:
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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复