问题描述
描述:Valid Parentheses 题目地址
Example
输入: “{()}[]” -> true
输入: “({)}[]” -> false
输入: “[]” -> true
输入: “” -> true
思路分析
使用栈结构来处理
栈介绍:** 先进后出(FILO), 例如子弹夹, 将元素放入栈中叫
压栈
将元素从栈中弹出叫出栈
以字符串 {()}
为例:
1, 第一个元素
{
入栈
2, 第二个元素(
判断和栈顶
的元素不匹配, 也将其压入栈中
3, 第三个元素)
和栈顶
元素匹配, 所以将栈顶
元素弹出, 然后栈中只剩下{
4, 第四个元素}
和现在的栈顶
元素匹配, 所以也将栈顶
元素弹出, 现在为空栈
5, 返回结果:括号字符串是合法的
代码实现
package com.alan.leetcode;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class ValidParentheses {
public static void main(String[] args) {
Solution solution = new Solution();
boolean result = solution.isValid("[({)]");
System.out.println(result);
}
}
class Solution {
static Map<Character, Character> map = new HashMap<>(3);
static {
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
}
public boolean isValid(String s) {
// 字符串转换为字符数组
char[] chars = s.toCharArray();
Stack<Character> stack = new Stack<>();
for (char aChar : chars) {
// 查看栈顶的是否匹配
if (stack.empty()) {
stack.push(aChar);
continue;
}
if (map.get(aChar) != null && map.get(aChar).equals(stack.peek())) {
stack.pop();
} else {
stack.push(aChar);
}
}
return chars.length > 0 && stack.empty();
}
}
近期评论