经典栈类题目 括号匹配 Java stack

荒凉一梦 提交于 2020-02-20 04:03:23

在Java中栈直接继承Stack 使用Stack容器,不向queue是用LinkedList实现的。
s.push()压入 pop()弹出值并删除
思路:
寻找能配成(),太经典了,就像凑成aa 这样消除得到一样 应该先先到使用栈。
传送门

import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		char[] a = cin.next().toCharArray();
		Stack<Character> s = new Stack<Character>();
		
		Stack<Integer> ss = new Stack<Integer>();
		
		int x[] = new int[50005];
		int y[] = new int[50005];
		int flag = 0;
		int n = a.length;int cnt = 0;
		for(int i = 0;i < n;i++) {
			if(a[i] == '(') {
				s.push(a[i]);
				ss.push(i + 1);
			} else if (a[i] == ')' && !s.isEmpty()){
				s.pop();
				++cnt;
				x[cnt] = ss.pop();
				y[cnt] = i + 1;
			} else flag = 1;
		}
		if(flag == 1 || n % 2 == 1) {
			System.out.println("No");
		}else {
			System.out.println("Yes");
			for(int i = cnt;i >=1;i--) {
				System.out.println(x[i] + " " + y[i]);
			}
		}
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!