括号正确嵌套问题的实现(Java)

来源:互联网 发布:淘宝天猫运营工作内容 编辑:程序博客网 时间:2024/06/04 19:10
最近比较忙,前几天实现的一些小算法没时间写到博客上面,今天有时间了,把它整理出来,跟大家分享。

废话少说,进入正题。

题目描述:给定一字符串,其内包含“()”,“{}”和“[]”三种括号,请设计算法检验括号是否正确嵌套(如果字符串内不包含括号元素,按未正确嵌套处理)

首先给出代码,接下来我会对代码进行分析。

import java.util.*;public class Main{public static void main(String[] args){Scanner in=new Scanner(System.in);        String str1="";        while(in.hasNext()){            str1=in.nextLine();            System.out.println(parse(str1));        }}public static boolean parse(String s){ArrayList<Character> result=new ArrayList<Character>();if (s.contains("(")||s.contains("{")||s.contains("[")||s.contains("]")||s.contains("}")||s.contains(")")) {for(int i=0;i<s.length();i++){if (s.charAt(i)=='('||s.charAt(i)=='{'||s.charAt(i)=='['||s.charAt(i)==']'||s.charAt(i)=='}'||s.charAt(i)==')') {result.add(s.charAt(i));}}if (result.size()%2!=0) {return false;}else{int pairNum=result.size()/2;int count=result.size()/2;while(pairNum>0&&count>0){for(int i=0;i<result.size()-1;i++){if (result.get(i)=='('&&result.get(i+1)==')') {result.remove(i);result.remove(i);pairNum--;break;}if (result.get(i)=='['&&result.get(i+1)==']') {result.remove(i);result.remove(i);pairNum--;break;}if (result.get(i)=='{'&&result.get(i+1)=='}') {result.remove(i);result.remove(i);pairNum--;break;}}count--;}if (result.size()==0) {return true;}else {return false;}}}return false;}}

本代码采用ArrayList存储括号字符,即遍历字符串字符,每当遇到括号元素时,就将其加入该集合。

接下来就是对ArrayList进行处理了

1.如果字符串中不包含括号元素,直接返回false;如果包含括号元素,就将该括号元素加入ArrayList集合;

2.如果该ArrayList的大小,即size()不为偶数,那么说明括号一定没有正确嵌套。因为我们知道,括号都是成对出现的;

3.如果该ArrayList的大小,即size()为偶数,那么进行如下处理:

如果集合内的某一元素和其相邻元素能够组成括号对,那么就从该集合中,将该成对括号清除。接下来,再继续如此操作,进行count(size()/2)次后,如果该集合内仍然有元素,即size()大于0,那么说明括号没有正确嵌套。等于0,说明括号正确嵌套。

以上是个人愚见,如有不妥支持,还望各位看官批评指正。