题目链接:https://leetcode-cn.com/problems/longest-valid-parentheses/
题目截图:
对于括号配对的问题,很自然的就可以想到利用栈来解决。利用的数据结构是栈。
例如对于输入“)()())”,从头扫描字符串,如果遇到的是“(”则使其入栈,如果遇到的是“)”则与栈顶元素进行比对,如果配对成功则消去这两个字符,否则入栈。这里计算最长有效括号的长度就是用消去之前的栈顶元素-消去之后的栈顶元素。
示例:
class Solution { public int longestValidParentheses(String s) { //如果栈为空或者输入的字符串长度为0,那么肯定输出为0 if (s == null || s.length() == 0) { return 0; } int n = s.length();//n用于记录字符串的长度 char[] sArr = s.toCharArray();//将字符串转换为字符数组的形式,便于对其进行遍历 Stack<Integer> stack = new Stack<>();//定义一个栈 int result = 0;//利用result来记录有效括号的长度 // 在开始扫描前先将-1入栈 stack.push(-1); for (int i = 0; i < n; ++i) { //遇到“)”时,栈不为空并且栈顶元素为“(”,进行的操作便是栈顶出栈进行配对,并记录最长有效括号的长度 if (sArr[i] == ‘)‘ && stack.size() > 1 && sArr[stack.peek()] == ‘(‘) { stack.pop();
result = Math.max(result, i - stack.peek()); } else { stack.push(i); } } return result; } }
原文:https://www.cnblogs.com/xiaona-/p/12750315.html