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?