给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
时间: 2023-08-14 15:00:37 浏览: 179
### 回答1:
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解题思路:
使用栈来解决这个问题,遍历字符串,如果是左括号就入栈,如果是右括号就判断栈顶元素是否与之匹配,如果匹配就出栈,否则返回false。
如果遍历完字符串后栈为空,说明所有括号都匹配,返回true,否则返回false。
代码实现:
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
} else {
if (st.empty()) {
return false;
}
char top = st.top();
st.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
return st.empty();
}
};
### 回答2:
要判断一个字符串的有效性,需要检查括号的配对情况是否正确。我们可以使用栈这一数据结构来进行检查。
首先,我们定义一个空栈。然后,遍历字符串中的每一个字符。
对于当前字符,如果是左括号'('、'{'或'[',则将其压入栈中。
如果是右括号')'、'}'或']',则检查栈顶元素是否与当前字符对应的左括号能够配对。配对的左括号有:')'对应'(','}'对应'{',']'对应'['。如果能够配对,则弹出栈顶元素;否则,返回False。
遍历结束后,如果栈中还有元素,则说明有未配对的左括号,返回False;否则,返回True。
下面是具体实现的代码:
def isValid(s):
stack = [] # 定义一个空栈
for char in s: # 遍历字符串中的每一个字符
if char in ['(', '{', '[']: # 如果是左括号,则压入栈中
stack.append(char)
else: # 如果是右括号
if len(stack) == 0: # 如果栈中没有元素,说明没有与之配对的左括号
return False
if char == ')' and stack[-1] == '(': # 如果当前字符为')',且栈顶元素为'(',则弹出栈顶元素
stack.pop()
elif char == '}' and stack[-1] == '{': # 如果当前字符为'}',且栈顶元素为'{',则弹出栈顶元素
stack.pop()
elif char == ']' and stack[-1] == '[': # 如果当前字符为']',且栈顶元素为'[',则弹出栈顶元素
stack.pop()
else: # 如果当前字符与栈顶元素不能配对,则返回False
return False
return len(stack) == 0 # 如果栈中没有剩余元素,则返回True,否则返回False
通过以上算法,可以判断给定的字符串s是否有效。
### 回答3:
这个问题可以使用栈来解决。我们遍历字符串s中的每个字符,如果遇到左括号 '(','{','[',则将其压入栈中。如果遇到右括号 ')','}',']',则判断栈顶的括号是否与当前括号匹配,如果匹配,则将栈顶的括号弹出,继续遍历下一个字符;如果不匹配或者栈为空,则返回False,表示字符串无效。遍历完字符串s后,如果栈为空,则返回True,表示字符串有效;如果栈不为空,则返回False,表示字符串无效。
以下是具体的实现:
def isValid(s):
stack = []
for char in s:
if char in ['(', '{', '[']:
stack.append(char)
else:
if not stack:
return False
if char == ')' and stack[-1] != '(':
return False
if char == '}' and stack[-1] != '{':
return False
if char == ']' and stack[-1] != '[':
return False
stack.pop()
return not stack
# 测试
print(isValid("()"))
print(isValid("()[]{}"))
print(isValid("(]"))
print(isValid("([)]"))
print(isValid("{[]}"))
输出结果:
True
True
False
False
True
阅读全文