括号匹配问题

1。判断括号是否成对出现

 1 import java.util.Stack;  
 2 
 3 public class KuoHao  
 4 {  
 5   
 6     public boolean check(String str)  
 7     {  
 8         Stack<Character> stack = new Stack<Character>();  
 9         boolean flag = true;  
10         for (int i = 0; i < str.length() && flag; i++)  
11         {  
12             try  
13             {  
14                 switch (str.charAt(i))  
15                 {  
16                 case '(':  
17                 case '[':  
18                 case '{':  
19                     stack.push(str.charAt(i));  
20                     break;  
21                 case ')':  
22                     if (stack.pop() != '(')  
23                         flag = false;  
24                     break;  
25                 case ']':  
26                     if (stack.pop() != '[')  
27                         flag = false;  
28                     break;  
29                 case '}':  
30                     if (stack.pop() != '{')  
31                         flag = false;  
32                     break;  
33                 }  
34             }  
35             catch (Exception e)  
36             {  
37                 flag = false;  
38             }  
39         }  
40         if (flag && !stack.isEmpty())  
41             flag = false;  
42   
43         return flag;  
44     }  
45   
46     public static void main(String[] args)  
47     {  
48         KuoHao pm = new KuoHao();  
49         System.out.println("(: " + pm.check("("));  
50         System.out.println("a(bc[d])e{fd}: " + pm.check("a(bc[d])e{fd}"));  
51         System.out.println("a(bc]d: " + pm.check("a(bc]d"));  
52         System.out.println("a(b(c))d: " + pm.check("a(b(c))d"));  
53         System.out.println("a(b)c)d: " + pm.check("a(b)c)d"));  
54     }  
55 }  

2.问题描述:括号成对出现,查找第N个左括号与之匹配的右括号中的内容

  例如:字符串:A((B)((CD)(E)F)) 查找第1左括号,输出(B)((CD)(E)F)

import java.util.Scanner;

public class KuoHao2 {
	
	public static void search(int N,String s){
		int i = 0,k=-1, w= -1;
		do{
			k = s.indexOf("(",k+1);
			i++;
		}while(i < N && k != -1);
		
		if(k > 0){
			int first = k+1;
			System.out.println("查找字符串\""+s+"\"的第"+N+"个左括号内的内容,匹配起始位于字符串的第:"+(first)+"位");
			w = s.indexOf(")",k+1);
			w = a(w, k, s);
				int end = w;
				System.out.println("匹配结束位于字符串的第:"+(end+1)+"位");
				System.out.println("输出为:"+s.substring(first,end ));
			} else {
				System.out.println("不存在')'");
			}
			
		
	}
	

	public static int a(int w, int k, String s){
		if(w > 0){
			int  m =1, n = 1;
			boolean f = false;
			do{
				if(s.indexOf("(",k+1)>0 && s.indexOf("(",k+1) < w){
					k = s.indexOf("(",k+1);
					m += 1;
				}
				while( m > n ){
					while(s.indexOf("(",k+1)>0 && s.indexOf("(",k+1) < w){
						m++;
						k = s.indexOf("(",k+1);
						
					}
					
					for(int j=0; j<=m-n; j++){
						n++;
						w = s.indexOf(")",w+1);
					}
				}
				
				if(s.indexOf("(",k+1)>0 && s.indexOf("(",k+1) < w)
					f = true;
				else f = false;
			}while(f);
		} else {
			System.out.println("不存在'('");
		}
		return w;
	}
		
	public static void main(String[] args) {
		String s = "A((B)((CD)(E)F))";
		Scanner ss =  new Scanner(System.in);
		int N = ss.nextInt();
		search(N,s);
	}

}

  运行截图:

      

posted @ 2013-07-20 22:16  cq-home  Views(804)  Comments(3Edit  收藏  举报