You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
android-notes/blogs/Algorithm/剑指 Offer/字符串相关.md

3.3 KiB

字符串相关

05. 替换空格

class Solution {

    public String replaceSpace(String s) {
        StringBuilder builder = new StringBuilder();
        int i = 0;
        while (i < s.length()) {
            char c = s.charAt(i);
            if (c == ' ') {
                builder.append("%20");
            } else {
                builder.append(c);
            }
            i++;
        }
        return builder.toString();
    }
}

50. 第一个只出现一次的字符

class Solution {
    public char firstUniqChar(String s) {
        if (s.length() == 0) {
            return ' ';
        }
        LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                return entry.getKey();
            }
        }
        return ' ';
    }
}
class Solution {
    public char firstUniqChar(String s) {
        char[] array = s.toCharArray();
        int[] ints = new int[256];
        for (char c : array) {
            ints[c]++;
        }
        for (char c : array) {
            if (ints[c] == 1) {
                return c;
            }
        }
        return ' ';
    }
}

58 - II. 左旋转字符串

class Solution {
    public String reverseLeftWords(String s, int n) {
        return s.substring(n) + s.substring(0, n);
    }
}

Offer 58 - I. 翻转单词顺序

class Solution {

    public String reverseWords(String s) {
        String[] strings = s.trim().split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = strings.length - 1; i >= 0; i--) {
            if (strings[i].equals("")) {
                continue;
            }
            sb.append(strings[i]).append(" ");
        }
        return sb.toString().trim();
    }
}

67. 把字符串转换成整数

class Solution {
    
    public int strToInt(String str) {
        str = str.trim();
        if (str.length() == 0) {
            return 0;
        }
        boolean isMinus = false;
        char[] ch = str.toCharArray();
        if (ch[0] == '+' || ch[0] == '-' || Character.isDigit(ch[0])) {
            if (ch[0] == '+' || ch[0] == '-') {
                if (ch[0] == '-') {
                    isMinus = true;
                }
                ch = Arrays.copyOfRange(ch, 1, ch.length);
            }
            int index = 0;
            long res = 0;
            while (index < ch.length && Character.isDigit(ch[index])) {
                res *= 10;
                res += ch[index] - '0';
                if (res > Integer.MAX_VALUE) {
                    return isMinus ? Integer.MIN_VALUE : Integer.MAX_VALUE;
                }
                index++;
            }
            return isMinus ? -(int) res : (int) res;
        }
        return 0;
    }
}