标签:leetcode java valid parentheses
Given a string containing just the characters ‘(‘
, ‘)‘
, ‘{‘
, ‘}‘
, ‘[‘
and ‘]‘
,
determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are
all valid but "(]"
and "([)]"
are not.
给定一个字符串,包含以下字符‘(‘
, ‘)‘
, ‘{‘
, ‘}‘
, ‘[‘
and ‘]‘,
判断输入的字符串是否有效。
这些括号必须按正确的顺序关闭,
"()"
and "()[]{}"就是有效的,
"(]"
and "([)]"
就是无效的。
该题是匹配括号是否匹配合法问题,可以采用栈来实现,而栈一般采用数组来进行标示。如果遇到字符(
,{
和[
,则将其压入栈中,如果遇到)
,}
和]
,则需要对栈顶元素进行判定,看是否与括号相匹配,如果匹配则弹出栈顶元素,否则则认为匹配不合法,直接结束匹配过程。
算法流程如下:
定义数组栈stack;
foreach c in String:
if c 为(,{,[ then stack.push(c);
if c 为 ), }, ] then 判定stack是否为空和stack.top是否与c相匹配。
public class Solution { private boolean a; private boolean flag; private int i; private int n; public boolean isValid(String s) { Stack st= new Stack(); // 创建堆栈对象 if (s.length()%2!=0) flag=false; else { i=0; st.push(s.charAt(0)); while (i<s.length()-1) { if(st.empty()) { st.push(s.charAt(i+1)); i++; } if((st.peek().toString().charAt(0)=='('&&s.charAt(i+1)==')')||(st.peek().toString().charAt(0)=='['&&s.charAt(i+1)==']' )||(st.peek().toString().charAt(0)=='{'&&s.charAt(i+1)=='}')) { st.pop(); } else st.push(s.charAt(i+1)); i++; } flag=st.empty(); } return flag; } }
版权声明:本文为博主原创文章,转载注明出处
[LeetCode][Java] Valid Parentheses
标签:leetcode java valid parentheses
原文地址:http://blog.csdn.net/evan123mg/article/details/46828255