← Strings

Valid Parentheses

Easy
Python
def is_valid(s):
    stack=[]; m={')':'(','}':'{',']':'['}
    for c in s:
        if c in m:
            if not stack or stack[-1]!=m[c]: return False
            stack.pop()
        else: stack.append(c)
    return not stack
Java
public boolean isValid(String s){
    Stack<Character> st=new Stack<>();
    for(char c:s.toCharArray()){
        if(c=='('||c=='{'||c=='[') st.push(c);
        else{
            if(st.isEmpty()) return false;
            char t=st.pop();
            if((c==')'&&t!='(')||(c=='}'&&t!='{')||(c==']'&&t!='[')) return false;
        }
    } return st.isEmpty();
}

Key Insight

Python dict mapping cleaner. 'not stack' works — empty list is falsy.

Python → Java Differences

  • Python dict mapping vs explicit comparisons
  • 'not stack' vs isEmpty()
  • Stack logic identical
Python
def is_valid(s):
    stack=[]; m={')':'(','}':'{',']':'['}
    for c in s:
        if c in m:
            if not stack or stack[-1]!=m[c]: return False
            stack.pop()
        else: stack.append(c)
    return not stack
Java
public boolean isValid(String s){
    Stack<Character> st=new Stack<>();
    for(char c:s.toCharArray()){
        if(c=='('||c=='{'||c=='[') st.push(c);
        else{
            if(st.isEmpty()) return false;
            char t=st.pop();
            if((c==')'&&t!='(')||(c=='}'&&t!='{')||(c==']'&&t!='[')) return false;
        }
    } return st.isEmpty();
}

Algorithm Steps

1. Opening: push
2. Closing: check top
3. Return empty