22.栈的压入和弹出序列
来源:互联网 发布:空调换热器设计软件 编辑:程序博客网 时间:2024/04/25 15:23
给定两个序列A,B,判断按照A的入栈顺序能否得到B的出栈顺序
思路比较明确,创建一个栈,当栈为空,或者栈顶元素不是B的目前序列元素(这部分可以用数组或者列表保存),那么就按照A的序列顺序压入下一个数,如果是的话就将这个数出栈。如果A的所有元素已经入栈,但是B的元素还有没有入栈的,那么说明不符合。
代码需要注意边界条件:
public class twenty { public static void main(String args[]){ Stack<Integer>s=new Stack<Integer>(); List<Integer>list=new ArrayList<Integer>();//保存A序列 List<Integer>list2=new ArrayList<Integer>();//保存B序列 Scanner cin=new Scanner(System.in); while(true){ int m=cin.nextInt();//以0停止 if (m==0) break; list.add(m); } while(true){ int m=cin.nextInt(); if (m==0) break; list2.add(m); } cin.close(); int i=0;//控制第一个栈压入 int j=0;//控制第二个栈压入 while(i<=list.size()&&j<list.size()){ if (s.isEmpty()||s.peek()!=list2.get(j)){//如果栈为空,或者栈顶元素不是等待元素 int m=list2.get(j); while(i<list.size()&&list.get(i)!=m){ s.push(list.get(i)); i++; } if (i==list.size())//栈顶元素不是等待元素,并且前一个已经遍历结束,说明不符合 break; else i++;//跳过符合的这个元素 }else{//栈顶元素就是等待元素 s.pop(); } j++;//待压入元素往后面去一个 } if (i==list.size()&&j==list.size()) System.out.println("符合"); else System.out.println("不符合");}}
0 0
- 栈的压入和弹出序列
- 栈的压入和弹出序列
- 栈的压入和弹出序列
- 栈的压入和弹出序列
- 22.栈的压入和弹出序列
- 22. 栈的压入、弹出序列
- 22.栈的压入、弹出序列
- 栈------栈的压入和弹出序列
- 【栈和队列3】 栈的压入、弹出序列
- 剑指-栈的压入和弹出序列
- 剑指Offer---栈的压入和弹出序列
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 欢迎使用CSDN-markdown编辑器
- Perf -- Linux下的系统性能调优工具,第 2 部分
- 浏览器meta charset和response中content type的优先级
- AlexNet笔记
- 笔记:根据类名获取元素的问题
- 22.栈的压入和弹出序列
- jsp的九大内置对象
- 集合
- iOS KVO模式简解
- POJ3694 Network 割边 LCA
- UVA - 514
- LeetCode - 28. Implement strStr()
- POJ 3409 Broken line 英文少
- 雾效果