【Leetcode从零开始】20190503 #20.有效的括号

简单说一下今天的收获:清楚地认识到了自己的水准 直接贴一下题解代码:

 class Solution(object):
    def isValid(self, s):
    """
    :type s: str
    :rtype: bool
    """

    # The stack to keep track of opening brackets.
    stack = []

    # Hash map for keeping track of mappings. This keeps the code very clean.
    # Also makes adding more types of parenthesis easier
    mapping = {")": "(", "}": "{", "]": "["}

    # For every bracket in the expression.
    for char in s:

        # If the character is an closing bracket
        if char in mapping:

            # Pop the topmost element from the stack, if it is non empty
            # Otherwise assign a dummy value of '#' to the top_element variable
            top_element = stack.pop() if stack else '#'

            # The mapping for the opening bracket in our hash and the top
            # element of the stack don't match, return False
            if mapping[char] != top_element:
                return False
        else:
            # We have an opening bracket, simply push it onto the stack.
            stack.append(char)

    # In the end, if the stack is empty, then we have a valid expression.
    # The stack won't be empty for cases like ((()
    return not stack
复制代码

再放一个java版本的以后学习:

class Solution {

// Hash table that takes care of the mappings.
private HashMap<Character, Character> mappings;

 // Initialize hash map with mappings. This simply makes the code easier to read.
  public Solution() {
    this.mappings = new HashMap<Character, Character>();
    this.mappings.put(')', '(');
    this.mappings.put('}', '{');
    this.mappings.put(']', '[');
}

 public boolean isValid(String s) {

// Initialize a stack to be used in the algorithm.
Stack<Character> stack = new Stack<Character>();

for (int i = 0; i < s.length(); i++) {
  char c = s.charAt(i);

  // If the current character is a closing bracket.
  if (this.mappings.containsKey(c)) {

    // Get the top element of the stack. If the stack is empty, set a dummy value of '#'
    char topElement = stack.empty() ? '#' : stack.pop();

    // If the mapping for this bracket doesn't match the stack's top element, return false.
    if (topElement != this.mappings.get(c)) {
      return false;
    }
  } else {
    // If it was an opening bracket, push to the stack.
    stack.push(c);
  }
}

// If the stack still contains elements, then it is an invalid expression.
return stack.isEmpty();
    }
}   
复制代码

现在有两个py代码的问题没有懂:

1.没见过这一句的语法:

top_element = stack.pop() if stack else '#'
复制代码

2.不明白else '#'的意思

明天要搞清楚然后完善一下

###20190503更新

    if ... else "#"
复制代码

是作为赋值语句的一部分,如果满足...条件就为前一句的赋值内容,否则赋值为'#'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值