20. Valid Parentheses 有效的配对

https://leetcode.com/problems/valid-parentheses/

题目:如果一个字符串只包含‘(’,‘)、’{‘、’}‘、’[‘和’]‘,则确定输入字符串是否有效。打开括号必须由相同类型的括号关闭,则输入字符串是有效的。开括号必须按照正确的顺序关闭。注意,空字符串也被认为是有效的。

思路:新建一个栈,遍历输入字符串,如果当前字符为左半边括号,则将其压入栈中;如果当前字符为右半边括号且栈为空,则直接返回false;如果当前字符为右半边括号且栈不为空,则取出栈顶元素,若为对应的左半边括号,则继续循环,反之返回false。

32. Longest Valid Parentheses 最长有效配对

https://leetcode.com/problems/longest-valid-parentheses/

题目:给定一个只包含字符‘(’和‘)’的字符串,查找最长的有效(格式良好)括号子字符串的长度。

思路:

①使用Stack栈

②DP动态规划

class Solution {
    public int longestValidParentheses(String s) {
        // using Stack
        Stack<Integer> st = new Stack<>();
        int result = 0;
        st.push(-1);
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == ')' && st.size() > 1 && s.charAt(st.peek()) == '(') {
                st.pop();
                result = Math.max(result, i - st.peek());
            } else {
                st.push(i);
            }
        }
        return result;
    }
}
class Solution {
    public int longestValidParentheses(String s) {
        // using DP
        int[] dp = new int[s.length()];
        int result = 0, leftCount = 0;
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == '(') {
                leftCount++;
            } else if(leftCount > 0) {
                dp[i] = dp[i - 1] + 2;
                dp[i] += (i - dp[i]) > 0 ? dp[i - dp[i]] : 0;
                result = Math.max(result, dp[i]);
                leftCount--;
            }
        }
        return result;
    }
}

42. Trapping Rain Water 装雨水

https://leetcode.com/problems/trapping-rain-water/

题目:如果n个非负整数表示一个标高图,其中每个杆的宽度为1,则计算雨后它能装多少水。

思路:

84. Largest Rectangle in Histogram 直方图中的最大矩形

https://leetcode.com/problems/largest-rectangle-in-histogram/

题目:给定n个非负整数表示直方图的条高,其中每条的宽度为1,则在直方图中找出最大矩形的面积。

思路:

149. Max Points on a Line 直线上最大的点

https://leetcode.com/problems/max-points-on-a-line/

题目:给定二维平面上的n个点,求出位于同一直线上最大的点。

思路:

150. Evaluate Reverse Polish Notation 求解逆波兰表示法的式子

https://leetcode.com/problems/evaluate-reverse-polish-notation/

题目:用反向波兰表示法计算算术表达式的值。有效运算符是+,-,*,/。每个操作数可以是一个整数,也可以是另一个表达式。注:两个整数之间的除数应截断为零。给定的RPN表达式始终有效。这意味着表达式将始终计算为一个结果,并且不会被零运算除以任何值。

思路:

02-12 16:08
查看更多