括号匹配(栈Stack的使用)

蒜头君在纸上写了一个串,只包含'('')'。一个'('能唯一匹配一个')',但是一个匹配的'('必须出现在')'之前。请判断蒜头君写的字符串能否括号完全匹配,如果能,输出配对的括号的位置(匹配的括号不可以交叉,只能嵌套)。

输入格式

一行输入一个字符串只含有'('')',输入的字符串长度不大于50000。

输出格式

如果输入括号不能匹配,输出一行"No",否则输出一行"Yes",接下里若干行每行输出 2 个整数,用空格隔开,表示所有匹配对的括号的位置(下标从 1 开始)。你可以按照任意顺序输出。

本题答案不唯一,符合要求的答案均正确

样例输入1

(())

样例输出1

Yes
1 4
2 3

样例输入2

()()

样例输出2

Yes
1 2
3 4
package 计蒜客;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

public class 括号匹配 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        String str=scan.next();
        Stack<Character> stack=new Stack<Character>();
        HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
        boolean flag=true;
        int ii=0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='('){
                stack.push('(');
                ii++;
            }
            else{
                 if(stack.size()==0){
                     flag=false;
                     break;
                 }
                 stack.pop();
                 ii=ii+2;
            }
        }
        StringBuffer sb=new StringBuffer(str);
        
        if(stack.size()>0){
            flag=false;
        }
        if(flag==true){
            System.out.println("Yes");
            for(int i=1;i<sb.length();i++){
                if(sb.charAt(i)==')'){
                    for(int j=i-1;j>=0;j--){
                        if(sb.charAt(j)=='('){
                            map.put(j+1, i+1);
                            sb.setCharAt(j, ' ');
                            sb.setCharAt(i, ' ');
                            //System.out.println(sb);
                            break;
                        }
                    }
                }
            }
            for(Map.Entry<Integer, Integer> entry:map.entrySet()){
                System.out.println(entry.getKey()+" "+entry.getValue());
            }
        }else{
            System.out.println("No");
        }
    }

}

 

posted @ 2018-03-19 17:56  henu小白  阅读(359)  评论(0编辑  收藏  举报