前言
关于字符串更多的是梳理清楚逻辑,将自己的思路完整的表现出来,刷起来吧!
有效的括号
看到字符匹配,第一时间就想到通过栈这个特殊的数据结构进行匹配。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack();
Map<Character, Character> map = new HashMap<Character, Character>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
String in = "({[";
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(!map.containsKey(c)){
stack.push(c);
}else{
if(stack.isEmpty()||stack.peek()!=map.get(c)){
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
}
括号生成
这到题是上一道「有效括号」的进阶,可以先对所有可能做一个全排列,然后依次判断是否符合条件。
class Solution {
public List<String> generateParenthesis(int n) {
List<String> combinations = new ArrayList<String>();
generateAll(new char[2 * n], 0, combinations);
return combinations;
}
public void generateAll(char[] current, int pos, List<String> result) {
if (pos == current.length) {
if (valid(current)) {
result.add(new String(current));
}
} else {
current[pos] = '(';
generateAll(current, pos + 1, result);
current[pos] = ')';
generateAll(current, pos + 1, result);
}
}
public boolean valid(char[] current) {
int balance = 0;
for (char c: current) {
if (c == '(') {
++balance;
} else {
--balance;
}
if (balance < 0) {
return false;
}
}
return balance == 0;
}
}
二进制求和
class Solution {
public String addBinary(String a, String b) {
StringBuffer ans = new StringBuffer();
int n = Math.max(a.length(), b.length()), carry = 0;
for (int i = 0; i < n; ++i) {
carry += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;
carry += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
ans.append((char) (carry % 2 + '0'));
carry /= 2;
}
if (carry > 0) {
ans.append('1');
}
ans.reverse();
return ans.toString();
}
}
版权声明:本文为qq_41282102原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。