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

最近比较忙,前几天实现的一些小算法没时间写到博客上面,今天有时间了,把它整理出来,跟大家分享。

废话少说,进入正题。

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

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

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,说明括号正确嵌套。

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

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/qq_34383463/article/details/75222624
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞