持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天。
题目链接: leetcode.com/problems/va…
1. 题目介绍(有效的括号)
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
【Translate】: 给定一个字符串s只包含字符'(',')','{','}','['和']',确定输入字符串是否有效。
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
【Translate】:
输入字符串在下列情况下有效:
- 左括号必须用相同类型的括号关闭。
- 左括号必须按正确的顺序关闭。
【测试用例】:
【约束】:
2. 题解
2.1
源于sunjiaqi的题解10 lines simple java solution using stack。 它是通过堆栈后入先出的特性,对比最后一个入栈的元素是否与右括号相匹配,如果不匹配则返回false。同时对应字符串全为右括号的情况,在循环中如果堆栈为空,也返回false;循环结束后,如果堆栈还为空,则返回true,反之,返回false.
public boolean isValid(String s) {
Stack<Character> sk = new Stack<>();
for (char c : s.toCharArray())
{
if (c == '(' || c == '[' || c == '{') sk.push(c);
else if(sk.empty()) return false;
else if (c == ')' && sk.pop() != '(') return false;
else if (c == ']' && sk.pop() != '[') return false;
else if (c == '}' && sk.pop() != '{') return false;
}
return sk.empty();
}
2.2 括号替换
这种方法虽然简单易懂,但是比起堆栈效率就实在是太慢了。
public class Solution {
public boolean isValid(String s) {
int length;
do {
length = s.length();
s = s.replace("()", "").replace("{}", "").replace("[]", "");
} while(length != s.length());
return s.length() == 0;
}
}