📅  最后修改于: 2023-12-03 14:58:33.864000             🧑  作者: Mango
给定一个字符串,包含 '('
,')'
,'{'
,'}'
,'['
和 ']'
六种不同的字符,请编写一个函数,检查这个字符串是否是有效的。
字符串是有效的,当且仅当:
注意空字符串可被认为是有效字符串。
输入:"()"
输出:true
输入:"()[]{}"
输出:true
输入:"(]"
输出:false
输入:"([)]"
输出:false
输入:"{[]}"
输出:true
使用栈来存储左括号,遇到右括号时判断栈顶是否匹配。
具体来说,每次遇到一个括号时,如果它是左括号,则把它压入栈中;如果它是右括号,则判断它是否和栈顶元素匹配,如果匹配则弹出栈顶元素,否则返回 false
。
最后,如果栈为空,则说明所有括号都匹配,返回 true
,否则返回 false
。
下面是使用 Python 语言实现的代码片段:
def is_valid(s: str) -> bool:
stack = []
mapping = {")": "(", "]": "[", "}": "{"}
for char in s:
if char in mapping:
top_element = stack.pop() if stack else "#"
if mapping[char] != top_element:
return False
else:
stack.append(char)
return not stack
下面是使用 Java 语言实现的完整代码片段:
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' && !stack.empty() && stack.peek() == '(') {
stack.pop();
} else if (c == ']' && !stack.empty() && stack.peek() == '[') {
stack.pop();
} else if (c == '}' && !stack.empty() && stack.peek() == '{') {
stack.pop();
} else {
return false;
}
}
return stack.empty();
}
}
下面是使用 C++ 语言实现的完整代码片段:
#include <stack>
#include <string>
using namespace std;
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
stk.push(c);
} else if (!stk.empty()) {
char top = stk.top();
if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{')) {
stk.pop();
} else {
return false;
}
} else {
return false;
}
}
return stk.empty();
}
};