20. 有效的括号
2023-12-29 19:35:42
给定一个只包括?'('
,')'
,'{'
,'}'
,'['
,']'
?的字符串?s
?,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例?2:
输入:s = "()[]{}" 输出:true
示例?3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
?仅由括号?'()[]{}'
?组成
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (stack.size() == 0 || c == '(' || c == '[' || c == '{'){
stack.push(c);
}else {
if (c == ')' && stack.peek() == '('){
stack.pop();
}else if (c == ']' && stack.peek() == '['){
stack.pop();
}else if (c == '}' && stack.peek() == '{'){
stack.pop();
}else {
stack.push(c);
}
}
}
return stack.size() == 0? true : false;
}
方法2:
public boolean isValid(String s) {
if ((s.length() & 1) != 0 || s.length() == 1) {
return false;
}
int max = s.length() / 2;
char[] chars = new char[max];
int index = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ('(' == c || '[' == c || '{' == c) {
if (index >= max) {
return false;
}
chars[index] = c;
index++;
} else if (index-- > 0) {
char aChar = chars[index];
if (')' == c) {
if (aChar != '(') {
return false;
}
} else if (']' == c) {
if (aChar != '[') {
return false;
}
} else if ('}' == c) {
if (aChar != '{') {
return false;
}
}
} else {
return false;
}
}
return index==0;
}
方法3:
public boolean isValid(String s) {
char[] l = {'(','[','{'};
char[] r = {')',']','}'};
char[] ss = s.toCharArray();
int n = ss.length;
char[] st = new char[10010];
int top = -1;
st[++top] = ss[0];
boolean flag = true;
for(int i = 1; i < n; i++)
{
char c = ss[i];
if(c == '(' || c == '[' || c == '{')
st[++top] = c;
else
{
if(top < 0)
{
flag = false;
break;
}
if(c == ')' && st[top] != '(')
{
flag = false;
break;
}
if(c == ']' && st[top] != '[')
{
flag = false;
break;
}
if(c == '}' && st[top] != '{')
{
flag = false;
break;
}
top--;
}
}
if(top >= 0)
flag = false;
return flag;
}
文章来源:https://blog.csdn.net/linping_wong/article/details/135297034
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!