"["
false
"[]"
true
要求:空间复杂度
,时间复杂度
。
import java.util.Stack;
public class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
//使用foreach循环
for (char c : s.toCharArray()) {
if (c == '(')
stack.push(')');
else if (c == '{')
stack.push('}');
else if (c == '[')
stack.push(']');
else if (stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
}
class Solution {
public:
bool isValid(string s) {
int len=s.size();
stack<char> sta;
for(int i=0;i<len;i++){
if(s[i]=='(')sta.push(')');
else if(s[i]=='[')sta.push(']');
else if(s[i]=='{')sta.push('}');
else if(sta.empty())return false;
else if(sta.top()!=s[i])return false;
else sta.pop();
}
return sta.empty();
}
}; class Solution {
public:
bool isValid(string s) {
int l = s.length();
stack<char> st;
for(int i=0;i<l;i++)
{
if(s[i] == '(')
st.push(')');
else if(s[i] == '[')
st.push(']');
else if(s[i] == '{')
st.push('}');
else if(st.empty())
return false;
else if(st.top() != s[i])
return false;
else
st.pop();
}
return st.empty();
}
}; import java.util.Stack;
/**
* 20. Valid ParentTheses
* 有效的括号
* <p>
* 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
* 有效字符串需满足:
* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。
* 注意空字符串可被认为是有效字符串。
* 示例 1:
* 输入: "()"
* 输出: true
* 示例 2:
* 输入: "()[]{}"
* 输出: true
* 示例 3:
* 输入: "(]"
* 输出: false
* 示例 4:
* 输入: "([)]"
* 输出: false
* 示例 5:
* 输入: "{[]}"
* 输出: true
*/
public class Solution {
/**
* 用压栈弹栈的方式来实现
*/
public boolean isValid(String s) {
if (s == null || s.length() == 0){
return true;
}
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '('){
stack.push(')');
}
else if (chars[i] == '['){
stack.push(']');
}
else if (chars[i] == '{'){
stack.push('}');
}
else if (stack.isEmpty() || chars[i] != stack.pop()){
return false;
}
}
return stack.isEmpty();
}
public static void main(String[] args){
Solution solution = new Solution();
System.out.println(solution.isValid(""));
System.out.println(solution.isValid("()[]{}"));
System.out.println(solution.isValid("(]"));
System.out.println(solution.isValid("([)]"));
System.out.println(solution.isValid("{[]}"));
}
}
class Solution {
public:
bool isValid(string s) {
stack<char>st;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
st.push(s[i]);
else
{
if(st.empty())
return false;
else
{
if(s[i]==')'&&st.top()=='(')
st.pop();
else if(s[i]==']'&&st.top()=='[')
st.pop();
else if(s[i]=='}'&&st.top()=='{')
st.pop();
}
}
}
if(st.empty())
return true;
else
return false;
}
};
class Solution(object):
def isValid(self, s):
stack = []
for ss in s:
if ss == "(" or ss == "{" or ss == "[":
stack.append(ss)
elif ss == ")":
if len(stack) == 0 or stack.pop() != "(":
return False
elif ss == "}":
if len(stack) == 0 or stack.pop() != "{":
return False
elif ss == "]":
if len(stack) == 0 or stack.pop() != "[":
return False
return len(stack) == 0
class Solution {
unordered_map<char, char> map = {{'{', '}'}, {'[', ']'}, {'(', ')'}};
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
stack<char> st;
for (char& ch : s) {
if (st.empty() || map[st.top()] != ch) {
st.push(ch);
} else {
st.pop();
}
}
return st.empty();
}
}; public boolean isValid (String s) {
// write code here
//遇到括号匹配这样的题,首选使用栈来做
//每次遍历遇到'('、'['和'{'时,就将其对应的方括号')'、']'和'}'放入栈中
//然后遍历下一个,并与栈顶元素进行比较
//如果不同直接返回false;如果相同就将栈顶的反括号弹出,遍历结束都没有返回false就说明合法,返回true
Stack<Character> stack = new Stack<>();
char[] temp = s.toCharArray();
for (char c : temp){//遍历字符,如果遇到左括号,就把相应的右括号压入栈顶
if (c == '(') stack.push(')');
else if (c == '[') stack.push(']');
else if (c == '{') stack.push('}');
//else if (stack.isEmpty()) return false;//字符还没有遍历完就出现栈为空就返回false
//else if (stack.pop() != c) return false;//如果能到达这一步,就每次从栈顶pop出一个元素与当前元素c
//进行比较,如果不同就返回false
//也可以将上面两行代码合并:
else if (stack.isEmpty() || stack.pop() != c) return false;
}
return stack.isEmpty();//遍历结束如果栈为空就返回true,否则返回false
}
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
// write code here
int length = s.length();
if (length % 2 != 0) {
return false;
}
String s1 = s;
for (int i = 0; i < length / 2; i++) {
s1 = s1.replace("()", "").replace("[]", "").replace("{}", "");
}
return s1.length() <= 0;
}
} 我偷鸡了😂
# 解法一
class Solution:
def isValid(self, s: str) -> bool:
# 循环替换,直到字符串为空或者不变
while True:
ori = s
s = s.replace("()", "").replace("{}", "").replace("[]", "")
# 如果字符串为空,则为True
if not s:
return True
# 如果字符串不再发生变化,则为False
if s == ori:
return False
# 解法二
class Solution:
def isValid(self, s: str) -> bool:
# 定义一个映射关系
def judge_duichen(s1, s2):
mapping = {"}": "{", ")": "(", "]": "["}
return True if s2 in mapping and mapping[s2] == s1 else False
# 定义一个列表,用来存储当前入栈的元素
all = []
for i in s:
# 如果当前栈为空,则将当前元素入栈,并且跳到下一次循环
if not all:
all = [i]
continue
# 如果当前元素与栈顶元素对称,则将栈顶元素出栈
if judge_duichen(all[-1], i):
all.pop()
# 如果不对称,则将当前元素入栈
else:
all.append(i)
# 如果栈为空,则为True,否则为False
return all == []
# 解法三:
class Solution:
def isValid(self, s: str) -> bool:
all = []
mapping = {"}": "{", ")": "(", "]": "["}
# 先让所有的左括号入栈
for i in s:
if i in "{[(":
all.append(i)
# 如果当前元素是右括号,且栈为空,则返回False,因为右括号不能先于左括号出现
elif all == []:
return False
# 如果当前元素是右括号,则判断栈顶元素是否与其对称,如果对称,则将栈顶元素出栈,否则返回False
elif mapping[i] == all[-1]:
all.pop()
else:
return False
# 在循环结束后,如果栈为空,则为True,否则为False
return all == []
int i = 0, j = -1;
char a[10000];
bool isValid(char* s ) {
// write code here
while (s[i] != '\0') {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') { //左括号进栈
a[++j] = s[i];
}
else { //是右括号则判断是否匹配
if (s[i] == ')' && a[j] != '(') return false;
else if (s[i] == ']' && a[j] != '[') return false;
else if (s[i] == '}' && a[j] != '{') return false;
else j--;
}
i++; //指向字符串下一个字符
}
if (j >= 0) return false; //栈非空
else return true;
} class Solution:
def isValid(self , s: str) -> bool:
# write code here
stack = []
for val in s:
if stack == []:
stack.append(val)
else:
if stack[-1] + val in ['()', '[]', '{}']:
stack.pop(-1)
else:
stack.append(val)
if stack == []:
return True
else:
return False
定义一个空列表作为栈,遍历给定的字符串就行,当栈为空,直接将当前元素进栈。若栈不为空,就和栈顶元素进行组合匹配,如果是一个合法的括号,那就栈顶弹出。不是的就继续进栈。最后判断栈是否为空就行
public boolean isValid (String s) {
// write code here
Stack<Character> stack = new Stack<>();
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
if(c=='['){
stack.push(']');
}else if(c=='{'){
stack.push('}');
}else if(c=='('){
stack.push(')');
}else if(stack.isEmpty() || stack.pop()!=c){
return false;
}
}
return stack.isEmpty();
} class Solution {
public:
bool isValid(string s) {
stack<char>S;
for(int i=0;i<s.length();++i){
if(s[i]=='[' || s[i]=='(' || s[i]=='{') S.push(s[i]);
else if(S.empty()) return false;
else if(s[i]==']' && S.top()=='[' || s[i]=='}' && S.top()=='{' || s[i]==')' && S.top()=='(') S.pop();
else return false;
}
if(S.empty()) return true;
else return false;
}
}; import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
Stack<Character> signs = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (signs.empty() || map.values().contains(s.charAt(i))) { // open sign
signs.push(s.charAt(i));
} else { // close sign
if (signs.peek() == map.get(s.charAt(i))) {
signs.pop();
}
}
}
return signs.empty() ? true : false;
}
} public boolean isValid (String s) {
Stack<Character> st=new Stack<>();
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('){
st.push(')');
}else if(s.charAt(i)=='['){
st.push(']');
}else if(s.charAt(i)=='{'){
st.push('}');
}else{ //不是增加元素,是要弹出,但st为空,那就false
if(st.isEmpty()){
return false;
}
if(st.pop()!=s.charAt(i)){
return false;
}
}
}
if(!st.isEmpty()){
return false;
}
return true;
}