LeetCode—20—Valid Parentheses

题目

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

翻译

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

解题思路

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

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


LeetCode—20—Valid Parentheses_第1张图片

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

(1)依次放入元素


LeetCode—20—Valid Parentheses_第2张图片

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


LeetCode—20—Valid Parentheses_第3张图片

(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 stack = new Stack();
        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的教程


LeetCode—20—Valid Parentheses_第4张图片

(2)代码自动补全


LeetCode—20—Valid Parentheses_第5张图片

(3)android开发
LeetCode—20—Valid Parentheses_第6张图片

(4)页面开发


LeetCode—20—Valid Parentheses_第7张图片

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

关注公众号哦

LeetCode—20—Valid Parentheses_第8张图片

你可能感兴趣的:(LeetCode—20—Valid Parentheses)