题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
题解
class Solution {
public boolean isValid(String s) {
int len=s.length();
if(len%2!=0){
return false;
}
char[] s2c=s.toCharArray();
Stack<Character> stack=new Stack();
for(int i=0;i<len;i++){
if(s2c[i]=='('||s2c[i]=='['||s2c[i]=='{'){
stack.push(s2c[i]);
}else{
if(stack.isEmpty()){
return false;
}
char c=stack.pop();
if(s2c[i]==')'&&c!='('||s2c[i]==']'&&c!='['||s2c[i]=='}'&&c!='{'){
return false;
}
}
}
return stack.isEmpty();
}
}
笔记:
-
字符串和数组互相转换的方法:
字符串->数组:
String str = "abcsefgh"; char[] arr1 = str.toCharArray();
数组->字符串:
char[] data = {'a','b','c',' ','d'}; String dataStr = new String(data); //------------------------------------ char[] data = {'a','b','c',' ','d'}; String dataStr = String.valueOf(data);
-
stack种peek的作用:查看栈顶的对象。
-
解题思路:
1)排除长度为奇数的字符串
2)将左括号入栈
3)右括号与上一个pop结果比对,若不匹配则返回false,另外,空栈也可返回false
4)最后返回是否空栈