在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]);
}
}
}
}
来源:CSDN
作者:是水还是流年
链接:https://blog.csdn.net/weixin_43960370/article/details/104400174