(3) 百度2011研发工程师笔试卷

来源:互联网 发布:js点击弹出对话框 编辑:程序博客网 时间:2024/06/02 05:03

1 题目描述

判断一个括号字符串是否匹配正确,如果括号有多种,怎么做?如(([]))正确,[[(()错误。

2 思路

假设左括号为  ({[

右括号为  )}]

采用栈来解决该问题,扫描字符串, 当前符号为左括号时,入栈, 当前符号为右括号时候,出栈, 比较当前符号是否与出栈符号匹配,

如果是,则一直执行扫描字符串,入栈,出栈才操作,当扫描完字符串并且栈为空,则字符串匹配

3 java代码

import java.util.HashMap;import java.util.Map;import java.util.Stack;public class Exam1 {      private String left  = "({["; // 左括号   private String right = ")}]"; // 右括号   private Stack<Character> stack = new Stack<Character>();   private Map<Character,Character> map = new HashMap<Character,Character>();   {     for(int i = 0 ; i < left.length() ; i++){     map.put(left.charAt(i), right.charAt(i));     }   }   public boolean isMatch(String str){   if(str==null||str.length()==0) return false;    boolean isAddInStack = false;   for(int i = 0 ; i < str.length() ; i++){   char current = str.charAt(i);   if(left.contains(current+"")){   isAddInStack = true;   stack.push(current);   }else if(right.contains(current+"")){   if(stack.size()>0){   char poll =  stack.pop();   if(current!=map.get(poll)){   return false;   }    }     }   }   if(isAddInStack==true&&stack.size()==0) return true;  return false;   }  public static void main(String args[]){  String str = "()([{[]}])";  Exam1 exam1 = new Exam1();  boolean flag = exam1.isMatch(str);  System.out.println(flag);  }}


0 0
原创粉丝点击