A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hello world 黑马帝   /  2012-8-6 19:48  /  1254 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

、括号匹配问题
输入:一组小括号,如()()((()))
输出:括号是否匹配,匹配输出true,否则输出false
举例:
()
true
((())
false
)))(((
false
这个问题我想用栈的思想去实现,可是当我用代码实现时,就除了各种的问题,请问谁有好的方法实现,给出清晰的思路就可以

4 个回复

倒序浏览
给出思路就可以?
简单点的做法就是只用一个计数器就可以了,
遇到 “(”就自加一, 遇到“)”就自减一,
如果最后得数为0,就算匹配,返回true,
当然还有特殊处理,就是当遇到“)”时,检查计数器的值,如果这时已经为0了,那么必然不匹配,直接返回false就OK了
不知道这个思路如何

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
测试一下
  1. public static void main(String[] args) {
  2.         String src = "((()))()((()))";
  3.         System.out.println(match(src));
  4.     }

  5.     private static boolean match(String src) {
  6.         int start = 0;
  7.         for(int i = 0 ;i < src.length();i++){
  8.             switch (src.charAt(i)) {
  9.             case '(':
  10.                 start++;
  11.                 break;
  12.             case ')':
  13.                 start--;
  14.                 if(start<0){
  15.                     return false;
  16.                 }
  17.             }
  18.         }
  19.         return true;
  20.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
我认为
先出现的必为‘(’,否则就false;
先出现‘(’后,计数器1开始计数,直到‘)’出现;
‘)’出现后,则不能出现‘(’了,否则就false,在不出现‘(’的情况下,计数器2开始计数,直到结束。
比较计数器1和计数器2 ,相同则匹配,否则不匹配。
你觉得这样可以么?
回复 使用道具 举报
看了这个题目后也跟着测试了一下
  1. class LianXi
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String s="()()(()))(()";
  6.                 System.out.println(method(s));
  7.         }
  8.         public static  boolean method(String s)
  9.         {
  10.                  int num=0;
  11.                 char[] c=s.toCharArray();
  12.                 for (int x=0;x<c.length ;x++ )
  13.                 {
  14.                         if(c[0]==')')
  15.                                 return false;
  16.                         else
  17.                         {
  18.                                 if(c[x]=='(')
  19.                                         num++;
  20.                                 else
  21.                                         num--;
  22.                         }
  23.                 }
  24.                 if(num==0)
  25.                         return true;
  26.                 return false;
  27.         }
  28. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马