括号匹配+Java栈
生活随笔
收集整理的這篇文章主要介紹了
括号匹配+Java栈
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
括號匹配
import java.util.LinkedList;class MyStack{private int num;private LinkedList<Character>date;public MyStack(){this.num=0;date=new LinkedList<Character>();}public boolean isEmpty(){return num==0?true:false;}public void push(Character ch){this.date.add(ch);this.num++;}public Character pop(){if(this.isEmpty())return ' ';Character ch=this.date.remove(date.size()-1);this.num--;return ch;} } class Solution{private boolean check(char left,char right){if(left=='(') return right==')'?true:false;if(left=='[') return right==']'?true:false;if(left=='{') return right=='}'?true:false;return false;}public boolean isValid(String s){char[] temp=s.toCharArray();//toCharArray()將字符串轉(zhuǎn)化成字符數(shù)組MyStack stack=new MyStack();boolean flag=true;for(int i=0;i<temp.length;i++){if(temp[i]=='('||temp[i]=='{'||temp[i]=='[')stack.push(temp[i]);else{char left=stack.pop();if(left==' ')flag=false;if(!check(left,temp[i]))flag=false;}}if(flag){if(!stack.isEmpty())flag=false;}return flag;} } public class Main{public static void main(String[] args) {Solution solution=new Solution();System.out.println(solution.isValid("({[]})"));} }能夠匹配:true
反之:false;
逆波蘭表達(dá)式
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Stack;public class Main {public static void main(String[] args) {//逆波蘭表達(dá)式計算機(jī)求值//(3+4)×5-6 => 3 4 + 5 × 6 - //定義一個String類型的逆波蘭表達(dá)式 數(shù)字與數(shù)字與符號之間用空格隔開Scanner input=new Scanner(System.in);String suffixException=input.nextLine();input.close();//String suffixException="3 4 + 5 * 6 -";List<String> list= getList(suffixException);System.out.println(list);int calculate = calculate(list);System.out.println(calculate);}//將一個逆波蘭表達(dá)式, 依次將數(shù)據(jù)和運算符 放入到 ArrayList 中public static List<String> getList(String suffixException ){//然后將 suffixException 逐個放入到鏈表中String[] split = suffixException.split(" ");//將表達(dá)式按空格切分ArrayList<String> list = new ArrayList<>();//將切分后的加入到鏈表中for (String ele : split ){list.add(ele);}return list;}//定義計算方法/*完成對逆波蘭表達(dá)式的運算1)從左至右掃描,將 3 和 4 壓入堆棧;2)遇到+運算符,因此彈出 4 和 3(4 為棧頂元素,3 為次頂元素),計算出 3+4 的值,得 7,再將 7 入棧;3)將 5 入棧;4)接下來是×運算符,因此彈出 5 和 7,計算出 7×5=35,將 35 入棧;5)將 6 入棧;6)最后是-運算符,計算出 35-6 的值,即 29,由此得出最終結(jié)果*/public static int calculate(List<String> list) {//拿到list 之后把 list 中的字符串取出來 然后轉(zhuǎn)換為int 類型計算Stack<String> stack = new Stack<>();for (String ls : list) {//如果是數(shù)字 就入棧 使用正則表達(dá)式來匹配多位數(shù)if (ls.matches("\\d+")) {//入棧stack.push(ls);} else {//是符號就從棧里出兩個數(shù)字計算后入棧int num2 = Integer.parseInt(stack.pop());//將字符串轉(zhuǎn)換為整數(shù)int num1 = Integer.parseInt(stack.pop());//定義一個變量用來保存計算結(jié)果int res = 0;if (ls.equals("+")){ return res=num1+num2;}else if (ls.equals("-")){res= num1-num2;}else if (ls.equals("*")){res=num1*num2;}else if (ls.equals("/")){res=num1 /num2;}else {throw new RuntimeException("");}//把計算結(jié)果入棧stack.push(""+res);}}//最后留在棧中的數(shù)字就是表達(dá)式的運算結(jié)果return Integer.parseInt(stack.pop());} }總結(jié)
以上是生活随笔為你收集整理的括号匹配+Java栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java基础输入输出语句
- 下一篇: 微信两种拍照方法