给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
思路
这题运用了栈的数据结构
将各类左括号一次放入栈中,随后取出栈顶的元素
依次与后面的元素进行比较,分三种情况比较
如果栈顶位置的字符是'[',则对应位置的字符应该是’]',否则结果就为false
如果栈顶位置的字符是'{',则对应位置的字符应该是’}',否则结果就为false
如果栈顶位置的字符是'(',则对应位置的字符应该是’)',否则结果就为false
注意:
需要对结果进行判断
如果左边的括号为3,右边的括号是4,无法满足左边括号的匹配,所以要判断左括号无法匹配的情况
如果右边括号为4,左边括号为3,无法满足右边括号的匹配,最后需要进行判断
代码如下:
import java.util.Stack;
public class Solution {
public boolean isValid(String s){
Stack<Character> 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.isEmpty())
return false;
char topChar=stack.pop();
if(s.charAt(i)==')'&&topChar!='(')
return false;
if(s.charAt(i)==']'&&topChar!='[')
return false;
if(s.charAt(i)=='}'&&topChar!='{')
return false;
}
}
return stack.isEmpty();
}
}