给定一个只包括,(,’)’的字符串 s,判断字符串是否有效,有效字符串需满足:
时间: 2024-05-09 16:20:41 浏览: 114
1. 左右括号必须成对出现。
2. 左括号必须先出现,右括号必须后出现。
3. 括号必须正确嵌套,即对于每一个左括号,必须有一个与之对应的右括号。
例如,字符串 "()" 、"(())" 和 "()()" 都是有效的,但是 "(()" 和 "())(" 不是有效的。
可以使用栈来解决这个问题。遍历字符串,当遇到左括号时,将其压入栈中,当遇到右括号时,从栈中弹出一个左括号,判断二者是否匹配。如果栈为空或者左右括号不匹配,则字符串无效。最后,如果栈中还有元素,则字符串也无效。
以下是 Python 代码实现:
```python
def isValid(s: str) -> bool:
stack = []
for c in s:
if c == '(':
stack.append(c)
elif c == ')':
if len(stack) == 0 or stack.pop() != '(':
return False
return len(stack) == 0
```
相关问题
用java写个方法判断字符串是否有效,给定一个只包括'('、')'、'{'、'}'、'['、']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合,且左括号必须以正确顺序闭合,空字符串可以被认为是有效的字符串
可以使用栈(Stack)来解决此问题。遍历字符串,如果是左括号就将其入栈,如果是右括号就判断栈顶元素是否与之匹配,如果匹配则出栈,否则返回false。最后判断栈是否为空,如果为空则说明字符串有效。
以下是Java代码实现:
```java
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
return false;
}
}
}
return stack.isEmpty();
}
```
时间复杂度为O(n),其中n为字符串的长度。
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true C++编写
你可以使用栈来解决这个问题。遍历字符串,如果遇到左括号就将其入栈,如果遇到右括号就判断栈顶元素是否与其匹配,若匹配则出栈,否则返回false。最后如果栈为空,则说明字符串是有效的,返回true,否则返回false。
以下是C++的实现代码:
```cpp
#include <stack>
#include <string>
bool isValid(string s) {
stack<char> st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
} else {
if (st.empty()) {
return false;
}
if ((c == ')' && st.top() == '(') ||
(c == ']' && st.top() == '[') ||
(c == '}' && st.top() == '{')) {
st.pop();
} else {
return false;
}
}
}
return st.empty();
}
```
你可以调用该函数来判断字符串是否有效。例如,`isValid("()")` 的返回值为true。
阅读全文