题目
- 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
- 有效字符串需满足:
(1)左括号必须用相同类型的右括号闭合。
(2)左括号必须以正确的顺序闭合。 - 注意空字符串可被认为是有效字符串。
示例1:
输入:“()”
输出:true
示例2:
输入:“()[]{}”
输出:true
示例3:
输入:"(]"
输出:false
示例4:
输入:“([)]”
输出:false
示例5:
输入:“{[]}”
输出:true
解析:
- 其实这个算法很简单,只要用上栈的思想就可以了,当我们有左括号的时候,就对其进行入栈操作,有右括号的时候,只要和栈顶元素匹配就对其进行出栈操作。
代码如下
package com.xiyou.solutio;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
/**
* @author 92823
* 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
*
* 有效字符串需满足:
*
* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。
* 注意空字符串可被认为是有效字符串。
*
* 示例 1:
*
* 输入: "()"
* 输出: true
* 示例 2:
*
* 输入: "()[]{}"
* 输出: true
* 示例 3:
*
* 输入: "(]"
* 输出: false
* 示例 4:
*
* 输入: "([)]"
* 输出: false
* 示例 5:
*
* 输入: "{[]}"
* 输出: true
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/valid-parentheses
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class YouXiaoKuoHao {
/**
* 利用栈来解决,有左边的就进行入栈操作,有右边的就出栈
* @param s
* @return
*/
public boolean isValid(String s) {
// 定义几个Map
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('{', '}');
map.put('[', ']');
// 1. 声明一个栈出来,用来存储左扩号,左括号入栈,右括号出栈
Stack<Character> stack = new Stack<>();
// 2. 遍历字符串中的每一个字符
for (int i = 0; i < s.length(); i++) {
// 得到当前的字符
Character c = s.charAt(i);
// 如果当前的字符在map中,则进行入栈
if (map.containsKey(c)) {
// 入栈操作
stack.push(c);
}
// 如果当前栈不为空 且 字符不再map中,且该字符等于栈顶元素的map中的值(就是左右括号匹对),出栈
else if (!stack.empty() && map.getOrDefault(stack.pop(), ' ').equals(c)) {
// 已经进行出栈了
continue;
}
else {
// 什么都不满足 直接返回不匹配
return false;
}
}
if (stack.empty()) {
// 如果当前栈为空,则表示全部匹配了,否则返回false
return true;
}
return false;
}
}