5/24 String 杂题

今天脑洞开的有点大,写点水题压压惊。。

我发现当输入情况就那么几个的时候,用 switch case 是个省事的好办法。。可以直接把 hashmap 都省了。

public class Solution {
    public boolean isValid(String s) {
        if(s.length() == 0) return true;
        Stack<Character> stack = new Stack<Character>();

        for(int i = 0; i < s.length(); i++){
            char chr = s.charAt(i);
            if(stack.isEmpty()){
                stack.push(chr);
            } else {
                if(chr=='(' || chr=='[' || chr == '{'){
                    stack.push(chr);
                } else {
                    if(getPair(chr) == stack.peek()){
                        stack.pop();
                    } else {
                        return false;
                    }
                }
            }
        }

        return stack.isEmpty();
    }

    private char getPair(char chr){
        switch(chr){
            case ')':
                return '(';
            case ']':
                return '[';
            case '}':
                return '{';
            default:
                return '.';
        }
    }
}

自己匆忙写的,有点挫。

论坛上好一点的写法:

  • 当问题非常简单的时候,解题重点就从优化时间复杂度变成了优化代码简洁性。

比较 Trivial 的问题,没啥特别好说的。。

这题主要的乐趣在于怎么把多个是 anagram 的 string 映射到同一个 key 上。简单的办法是排序,或者开个 int[] 统计字母数量,然后生成一个类似于 1a2b4f 这种的 string signature.

除此之外比较 fancy 的写法是利用 prime number 做 string hashing,容错率不太好而且我觉得用 prime number 总是要去证明一下算法的正确性,不太适用于面试。

简直惊了。。这题有难度吗。。

Last updated

Was this helpful?