题解 | #判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭#
有效括号序列
http://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
标题
给出一个仅包含字符'('40,')'41,'{'123,'}'125,'['91和']'93,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}","([])"都是合法的括号序列,但"(]"和"([)]"不合法。*/
- 新建包,包名为 jiandan,新建类,类名为 NC52
- 题解:
这个题目我们可以利用栈 后进先出 的思想来解决问题
- 首先是把字符串转变为字符数组
- 对字符数组进行遍历
- 如果遍历到(,则往栈中添加相应的右括号;[和{也一样
- 当([{都不是,就只能是遍历到右括号了,那么从栈中取出元素pop,如果遍历到的该右括号元素与栈顶元素不相同,则不合法。
- 遍历完数组,我们判断栈中是否为空,如果里面还有元素,则不合法;
package jiandan;
import java.util.Stack;
public class NC52
{
public static void main(String[] args) {
System.out.println(isValid("([])"));
}
public static boolean isValid (String s) {
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
if(c == '(') stack.push(')');
else if(c == '[') stack.push(']');
else if(c == '{')stack.push('}');
else if(stack.isEmpty() || c != stack.pop()) return false;
}
return stack.isEmpty();
}
}