美文网首页
LeetCode—20—Valid Parentheses

LeetCode—20—Valid Parentheses

作者: yuandatou | 来源:发表于2018-10-26 14:11 被阅读16次

    题目

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

    An input string is valid if:

    Open brackets must be closed by the same type of brackets.
    Open brackets must be closed in the correct order.
    Note that an empty string is also considered valid.

    Example 1:

    Input: "()"
    Output: true
    Example 2:

    Input: "()[]{}"
    Output: true
    Example 3:

    Input: "(]"
    Output: false
    Example 4:

    Input: "([)]"
    Output: false
    Example 5:

    Input: "{[]}"
    Output: true

    翻译

    给定一个字符串,只包含(,[,{,),],},判定字符串的括号匹配是否合法。
    如:“()”,“()[]{}”是合法的。“(]”,“([)]”是非法的。
    注意:空的字符串也是合法的。

    解题思路

    在这里我们用栈这种数据结构来解题。了解栈这种数据结构的一些优势。

    假设我们拿到了如下的一个括号字符串。我们创建一个栈,用来放字符串。


    之后我们遍历字符串中每个字符。将字符依次放入栈中。放入的过程中。如果是左半边括号就压入栈中。如果是右半边括号,此时就取出栈顶的那个元素。如果括号能匹配上则弹出栈顶元素。继续放入元素并匹配。如果匹配不上直接返回false。如下:

    (1)依次放入元素


    (2)匹配失败,返回false。如果字符串合法。那么最终栈内的元素应该为空。


    (3)具体实现

    import java.util.Stack;
    
    // 20. Valid Parentheses
    // https://leetcode.com/problems/valid-parentheses/description/
    // 时间复杂度: O(n)
    // 空间复杂度: O(n)
    public class Solution {
    
        public boolean isValid(String s) {
    
            Stack<Character> stack = new Stack<Character>();
            for( int i = 0 ; i < s.length() ; i ++ )
                if( s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[')
                    stack.push(s.charAt(i));
                else{
    
                    if( stack.size() == 0 )
                        return false;
    
                    Character c = stack.pop();
    
                    Character match;
                    if( s.charAt(i) == ')' )
                        match = '(';
                    else if( s.charAt(i) == ']' )
                        match = '[';
                    else{
                        assert s.charAt(i) == '}';
                        match = '{';
                    }
    
                    if(c != match)
                        return false;
                }
    
            if( stack.size() != 0 )
                return false;  //如果遍历结束,栈内还有元素。返回false
    
            return true;   //如果字符串为空。那么也直接返回true
        }
    }
    

    一个有意思的IDE

    前几天发现了一个比较有意思的IDE-AIDE,AIDE是一个Android/Java集成开发环境,可以在Android系统内进行Android软件和游戏的开发。配上几张图

    (1)一些java的教程



    (2)代码自动补全



    (3)android开发

    (4)页面开发


    虽然在手机或者平板上操作不是很方便。但对于爱马仕来说。在没有电脑在身边时,也可以过过手瘾。感兴趣的朋友回复"AIDE",即可获取软件。
    关注我免费下载CSDN

    关注公众号哦

    相关文章

      网友评论

          本文标题:LeetCode—20—Valid Parentheses

          本文链接:https://www.haomeiwen.com/subject/syjktqtx.html