题目
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
关注公众号哦
网友评论