黑马程序员技术交流社区
标题:
编程题目
[打印本页]
作者:
hello world
时间:
2012-8-6 19:48
标题:
编程题目
、括号匹配问题
输入:一组小括号,如()()((()))
输出:括号是否匹配,匹配输出true,否则输出false
举例:
()
true
((())
false
)))(((
false
这个问题我想用栈的思想去实现,可是当我用代码实现时,就除了各种的问题,请问谁有好的方法实现,给出清晰的思路就可以
作者:
黑马__李龙
时间:
2012-8-6 19:56
给出思路就可以?
简单点的做法就是只用一个计数器就可以了,
遇到 “(”就自加一, 遇到“)”就自减一,
如果最后得数为0,就算匹配,返回true,
当然还有特殊处理,就是当遇到“)”时,检查计数器的值,如果这时已经为0了,那么必然不匹配,直接返回false就OK了
不知道这个思路如何
作者:
冯华亮
时间:
2012-8-6 21:17
测试一下
public static void main(String[] args) {
String src = "((()))()((()))";
System.out.println(match(src));
}
private static boolean match(String src) {
int start = 0;
for(int i = 0 ;i < src.length();i++){
switch (src.charAt(i)) {
case '(':
start++;
break;
case ')':
start--;
if(start<0){
return false;
}
}
}
return true;
}
复制代码
作者:
叶征东
时间:
2012-8-6 21:20
我认为
先出现的必为‘(’,否则就false;
先出现‘(’后,计数器1开始计数,直到‘)’出现;
‘)’出现后,则不能出现‘(’了,否则就false,在不出现‘(’的情况下,计数器2开始计数,直到结束。
比较计数器1和计数器2 ,相同则匹配,否则不匹配。
你觉得这样可以么?
作者:
潘星
时间:
2012-8-7 11:51
看了这个题目后也跟着测试了一下
class LianXi
{
public static void main(String[] args)
{
String s="()()(()))(()";
System.out.println(method(s));
}
public static boolean method(String s)
{
int num=0;
char[] c=s.toCharArray();
for (int x=0;x<c.length ;x++ )
{
if(c[0]==')')
return false;
else
{
if(c[x]=='(')
num++;
else
num--;
}
}
if(num==0)
return true;
return false;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2