JAVA经典百题之字符串反转

题目:字符串反转,如将字符串 “www.runoob.com” 反转为 “moc.boonur.www”

程序分析

要实现字符串的反转,可以考虑从两端向中间遍历,并交换对应位置上的字符。

方法1:使用StringBuilder

解题思路

使用StringBuilder的reverse方法可以方便地将字符串反转。

实现代码
public class StringReversal {

    public static String reverseWithStringBuilder(String str) {
        StringBuilder reversedStr = new StringBuilder(str);
        return reversedStr.reverse().toString();
    }

    public static void main(String[] args) {
        String str = "www.runoob.com";
        System.out.println("Original string: " + str);
        String reversedStr = reverseWithStringBuilder(str);
        System.out.println("Reversed string: " + reversedStr);
    }
}
优缺点
  • 优点:
    • 实现简单,一行代码即可完成。
    • StringBuilder拥有高效的字符串操作,性能较好。
  • 缺点:
    • 使用了额外的StringBuilder对象,占用一定的内存空间。

方法2:使用字符数组

解题思路

将字符串转换成字符数组,然后使用两个指针分别从头和尾交换对应位置上的字符,直至遍历到中间位置。

实现代码
public class StringReversal {

    public static String reverseWithCharArray(String str) {
        char[] charArray = str.toCharArray();
        int start = 0;
        int end = str.length() - 1;

        while (start < end) {
            // Swap characters at start and end positions
            char temp = charArray[start];
            charArray[start] = charArray[end];
            charArray[end] = temp;

            // Move the pointers towards the center
            start++;
            end--;
        }

        return new String(charArray);
    }

    public static void main(String[] args) {
        String str = "www.runoob.com";
        System.out.println("Original string: " + str);
        String reversedStr = reverseWithCharArray(str);
        System.out.println("Reversed string: " + reversedStr);
    }
}
优缺点
  • 优点:
    • 使用字符数组进行操作,无需额外的内存空间。
    • 性能较好,比StringBuilder方式更节省内存。
  • 缺点:
    • 需要显式地处理字符数组的操作。

方法3:递归方式

解题思路

利用递归,将字符串的第一个字符与最后一个字符交换,然后对剩余部分递归地进行反转。

实现代码
public class StringReversal {

    public static String reverseRecursive(String str) {
        if (str == null || str.length() <= 1)
            return str;

        return reverseRecursive(str.substring(1)) + str.charAt(0);
    }

    public static void main(String[] args) {
        String str = "www.runoob.com";
        System.out.println("Original string: " + str);
        String reversedStr = reverseRecursive(str);
        System.out.println("Reversed string: " + reversedStr);
    }
}
优缺点
  • 优点:
    • 使用递归,代码简洁。
  • 缺点:
    • 可能会导致栈溢出,特别是对于较长的字符串。

总结与推荐

  • 方法1(StringBuilder方式)简洁高效,适用于一行代码搞定字符串反转,适用于大多数场景。
  • 方法2(字符数组方式)也简单高效,性能较好且节省内存,适用于对内存有较高要求的场景。
  • 方法3(递归方式)代码简洁,但可能会导致栈溢出,不适用于较长的字符串。

推荐使用方法1(StringBuilder方式)作为最优方法,特别适用于简单的字符串反转。方法2(字符数组方式)也是一种不错的选择,适用于对内存要求较高的场景。方法3(递归方式)虽然简洁,但不适用于较长的字符串反转。

你可能感兴趣的:(JAVA经典百题,java,开发语言)