package com.github.chaoswang.learning.java.stack; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Stack; public class StackUtil { public static void addToBottom(Stack<Integer> s, Integer value) { Stack<Integer> tmpStack = new Stack<Integer>(); while(!s.empty()){ tmpStack.push(s.pop()); } s.push(value); while(!tmpStack.empty()){ s.push(tmpStack.pop()); } } /** * ����ջ�е�Ԫ����Integer, ��ջ����ջ���� : 5,4,3,2,1 ���ø÷����� Ԫ�ش����Ϊ: 1,2,3,4,5 * ע�⣺ֻ��ʹ��Stack�Ļ�����������push,pop,peek,isEmpty�� ����ʹ������һ��ջ������ */ public static void reverse(Stack<Integer> s) { Stack<Integer> tmpStack = new Stack<Integer>(); while(!s.empty()){ tmpStack.push(s.pop()); } while(!tmpStack.empty()){ StackUtil.addToBottom(s, tmpStack.pop()); } } /** * ɾ��ջ�е�ij��Ԫ�� ע�⣺ֻ��ʹ��Stack�Ļ�����������push,pop,peek,isEmpty�� ����ʹ������һ��ջ������ * * @param o */ public static void remove(Stack<Integer> s, Object o) { if(o == null){ return; } Stack<Integer> tmpStack = new Stack<Integer>(); while(!s.empty()){ Integer poped = s.pop(); if(o.equals(poped)){ break; } tmpStack.push(poped); } while(!tmpStack.empty()){ s.push(tmpStack.pop()); } } /** * ��ջ��ȡ��len��Ԫ��, ԭ����ջ��Ԫ�ر��ֲ��� ע�⣺ֻ��ʹ��Stack�Ļ�����������push,pop,peek,isEmpty�� * ����ʹ������һ��ջ������ * * @param len * @return */ public static Object[] getTop(Stack s, int len) { int stackSize = s.size(); if(len > stackSize || len <= 0){ throw new IllegalArgumentException("parameter len illegal"); } List ret = new ArrayList(); Stack tmpStack = new Stack(); for(int i=0;i<len;i++){ Object poped = s.pop(); ret.add(poped); tmpStack.push(poped); } while(!tmpStack.empty()){ s.push(tmpStack.pop()); } return ret.toArray(new Object[0]); } /** * �ַ���s ���ܰ�����Щ�ַ��� ( ) [ ] { }, a,b,c... x,yz ʹ�ö�ջ����ַ���s�е������Dz��dzɶԳ��ֵġ� ����s = * "([e{d}f])" , ����ַ����е������dzɶԳ��֣� �÷�������true ��� s = "([b{x]y})", * ����ַ����е����Ų��dzɶԳ��ֵģ� �÷�������false; * * @param s * @return */ public static boolean isValidPairs(String s) { Map<Character,Character> map = new HashMap<Character,Character>(); map.put(')', '('); map.put(']', '['); map.put('}', '{'); List bracketList = Arrays.asList('(', ')','[', ']','{', '}'); Stack<Character> tmpStack = new Stack<Character>(); for(char c : s.toCharArray()){ if(bracketList.contains(c)){ tmpStack.push(c); } } //���ŵĸ�������ż�����϶����ɶ� if(tmpStack.size()%2 != 0){ return false; } Stack<Character> tmpStack2 = new Stack<Character>(); int tmpSize = tmpStack.size(); for(int i=0;i<tmpSize/2;i++){ Character poped = tmpStack.pop(); Character value = map.get(poped); tmpStack2.push(value); } for(int i=0;i<tmpSize/2;i++){ if(!tmpStack.pop().equals(tmpStack2.pop())){ return false; } } return true; } }