判断有序括号列
(牛客网—牛客题霸算法篇—NC52)
题目描述
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
思路
Java实现
每次遇到’(’,’{’,’[‘这三种字符的时候,将字符入栈stk;而每次遇到’)’,’}’,’]‘这三种字符的时候则让对应的匹配字符出栈。具体规则如下:
1)引入辅助栈stack,遍历字符串,每次遇到’(’,’{’,’[‘字符的时候将字符入栈stack
2)当遇到’)’,’}’,’]'字符的时候,则检查栈是否空,且顶元素是否为匹配元素(如{和}匹配等),如果栈空或者栈顶元素不为匹配元素则括号序列不合法
3)当栈非空,且栈顶元素为匹配元素,则栈顶元素出栈。
4)循环匹配字符串,直到每次字符处理完
5)检查栈stack是否为空,栈为空则序列合法,否则不合法(当括号以正确顺序关闭时则最后的栈为空)
代码实现
import java.util.*;
import java.util.Stack;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
if(s==null){
return false;
}
char[] c=s.toCharArray();
Stack<Character> stack=new Stack();
char temp;
for(int i=0;i<s.length();i++){
switch(c[i]){
case '(':
case '[':
case '{':
stack.push(c[i]);
break;
case ')':
if(stack.empty()){
return false;
}
temp=stack.pop();
if(temp!='('){
return false;
}
break;
case ']':
if(stack.empty()){
return false;
}
temp=stack.pop();
if(temp!='['){
return false;
}
break;
case '}':
if(stack.empty()){
return false;
}
temp=stack.pop();
if(temp!='{'){
return false;
}
break;
}
}
return stack.empty()?true:false;
}
}
本文介绍了如何使用Python解决牛客网NC52题中的有序括号列判断问题。通过栈的数据结构,详细讲解了如何通过遍历字符串,检查括号配对的规则来验证一个括号序列是否合法。关键在于正确运用栈操作来确保每种括号都有对应匹配,并在最后检查栈是否为空以确定序列完整闭合。
235

被折叠的 条评论
为什么被折叠?



