题目描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
import java.util.*;
public class B {
//利用栈后进先出的特性进行括号匹配
//括号对之间可以以键值对的形式用HashMap存储,
public boolean isValid(String s) {
int len = s.length();
//字符串中的字符如果不是成双成对出现的话直接返回false
if(len%2!=0){
return false;
}
Deque<Character> stack = new LinkedList<>();
HashMap<Character,Character> map = new HashMap<>();
//右括号用作键,左括号作值
map.put(')','(');
map.put('}','{');
map.put(']','[');
for(int i=0;i<len;i++){
//如果字符串此位置是hash的键,且栈不为空以及栈顶元素是此键的值,则弹出此元素的值
//反之,若是此元素hash的值,则压入栈,进行后续匹配
if(map.containsKey(s.charAt(i))){
if(stack.isEmpty() || stack.peek()!=map.get(s.charAt(i))){
return false;
}
stack.pop();
}else{
stack.push(s.charAt(i));
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
B b = new B();
System.out.println(b.isValid(s));
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。