我正在尝试解决这个leetcode问题: 给定一个仅包含字符 '(', ')', '{', '}', '[' 和 ']' 的字符串,确定输入字符串是否有效。
输入字符串在以下情况下有效:
左括号必须由相同类型的括号封闭。 左括号必须按正确的顺序关闭。 请注意,空字符串也被视为有效。
我认为我几乎是正确的,并且已经研究这个问题很长时间了,但无法获得正确的输出,特别是在输入为“())”的情况下。
类解决方案{
public boolean isValid(String s) {
Stack<Character> c = new Stack<>();
int n = s.length();
boolean bool = false;
if (s.isEmpty() | s == null) { // Correct
return true;
}
for (int i=0 ; i<n ; i++) {
if (s.charAt(i) == '{') {
c.push('{');
} else if (s.charAt(i) == '[') {
c.push('[');
} else if (s.charAt(i) == '(') {
c.push('(');
} else if (s.charAt(i) == '}' & c.peek() == '{') {
c.pop();
} else if (s.charAt(i) == ']' & c.peek() == '[') {
c.pop();
} else if (s.charAt(i) == ')' & c.peek() == '(') {
c.pop();
} else {
break;
}
}
if (c.isEmpty()) {
return true;
} else {
return false;
}
}
}
最佳答案
如果有人正在寻找 java 解决方案:
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){
char strChar = s.charAt(i);
if(stack.empty()){
stack.push(strChar);
} else{
char stkChar = (char) stack.peek();
if(stkChar == '(' && strChar ==')' ){
stack.pop();
} else if(stkChar == '{' && strChar=='}'){
stack.pop();
} else if(stkChar == '[' && strChar == ']'){
stack.pop();
} else{
stack.push(strChar);
}
}
}
return (stack.empty() ? "true" : "false");
}
关于java - Leetcode 问题 - 20. 有效括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59046181/