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(递归方式)虽然简洁,但不适用于较长的字符串反转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高大人在上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值