算法-字符串

67 阅读1分钟

反转字符串

 public static String reverse(String s) {
        // 将字符串转换为字符数组
        char[] chars = s.toCharArray();
        int left = 0, right = chars.length - 1;
        // 反转字符数组
        while (left < right) {
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            left++;
            right--;
        }
        // 将字符数组转换为字符串
        return new String(chars);
    }

判断一个数字是否是回文数字

 public static boolean isPalindrome(int x) {
        // 如果 x 是负数或者末尾是 0 但不是 0 本身,直接返回 false
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int reversed = 0;
        while (x > reversed) {
            // 将 x 的末尾数字取出,加入到 reversed 的末尾
            reversed = reversed * 10 + x % 10;
            // 将 x 的末尾数字删除
            x /= 10;
        }
        // 如果数字长度为奇数,reversed 最中间的数字不用考虑
        return x == reversed || x == reversed / 10;
    }

回文字符串

 public static boolean isPalindrome(String s) {
        // 将字符串转换为小写字母,并去掉所有非字母和数字的字符
        s = s.toLowerCase().replaceAll("[^a-z0-9]", "");
        int left = 0, right = s.length() - 1;
        // 检查左右两端的字符是否相等
        while (left < right) {
            if (s.charAt(left) != s.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

字符串转数字:

public static int myAtoi(String s) {
        // 去掉字符串前后的空格
        s = s.trim();
        if (s.isEmpty()) {
            return 0;
        }
        // 判断正负号
        int sign = 1;
        int i = 0;
        if (s.charAt(0) == '+') {
            i++;
        } else if (s.charAt(0) == '-') {
            sign = -1;
            i++;
        }
        // 转换数字
        int result = 0;
        while (i < s.length() && Character.isDigit(s.charAt(i))) {
            int digit = Character.getNumericValue(s.charAt(i));
            // 处理溢出情况
            if (result > (Integer.MAX_VALUE - digit) / 10) {
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            result = result * 10 + digit;
            i++;
        }
        return sign * result;
    }