- 罗马数字转整数(*)
思路:
如果后面的数字大于当前的数字,那么就减去当前的数字即可,否则加上当前的数字

class Solution {
public HashMap<Character, Integer> map = new HashMap<>();
{
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
}
public int romanToInt(String s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
if (i < s.length() - 1 && map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
result -= map.get(s.charAt(i));
} else {
result += map.get(s.charAt(i));
}
}
return result;
}
}
}
- 最长公共前缀
思路:找出数组中最短的那个字符串,然后每一位都与其他字符串进行比较,当遇到相同字符时,将该字符加入到结果字符串中;当遇到不相同的字符时,就break
class Solution {
public String longestCommonPrefix(String[] strs) {
String s = "";
int min = 10000;
int index = -1;
int flag = 1;
for (int i = 0; i < strs.length; i++) {
if (strs[i].length() < min) {
min = strs[i].length();
index = i;
}
}
for (int i = 0; i < min; i++) {
char c = strs[index].charAt(i);
for (int j = 0; j < strs.length; j++) {
if (strs[j].charAt(i) != c) {
flag = 0;
}
}
if (flag == 1) {
s += c;
} else {
break;
}
}
return s;
}
}
- 有效的括号
思路:
当遇到左括号时,将对应的右括号入栈;当遇到右括号时,此时有两种情况
- 此时栈空,说明有无法匹配的右括号,return false
- 此时栈非空,但栈顶的括号与当前右括号不匹配,return false
循环完成后,要判断栈是否为空,若非空则说明左括号多余,return false
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push(')');
} else if (s.charAt(i) == '[') {
stack.push(']');
} else if (s.charAt(i) == '{') {
stack.push('}');
} else {
if (stack.isEmpty()) {
return false;
} else if (stack.peek() != s.charAt(i)) {
return false;
} else {
stack.pop();
}
}
}
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}
}