2021-07-03算法题

201 阅读1分钟
  1. 罗马数字转整数(*) image.png 思路: 如果后面的数字大于当前的数字,那么就减去当前的数字即可,否则加上当前的数字 image.png
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;
    }
}
}
  1. 最长公共前缀 image.png 思路:找出数组中最短的那个字符串,然后每一位都与其他字符串进行比较,当遇到相同字符时,将该字符加入到结果字符串中;当遇到不相同的字符时,就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;
    }
}
  1. 有效的括号 image.png 思路: 当遇到左括号时,将对应的右括号入栈;当遇到右括号时,此时有两种情况
  • 此时栈空,说明有无法匹配的右括号,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;
        }
    }
}