【剑指offer】面试题58 - II:左旋转字符串(Java)
发布日期:2021-04-30 21:03:16 浏览次数:105 分类:精选文章

本文共 1722 字,大约阅读时间需要 5 分钟。

字符串左旋转操作的实现

在编程中,字符串操作是一个常见的任务。今天,我们来探讨如何实现字符串的左旋转操作。左旋转操作的定义是将字符串的前若干个字符移动到字符串的末尾。例如,输入字符串"abcdefg"和数字2,输出应该是"cdefgab"。

首先,我们需要理解左旋转操作的实现逻辑。假设字符串长度为L,旋转的次数为n,那么左旋转n次的效果等同于将前n个字符移动到字符串末尾。例如,字符串"abcdefg",左旋转2次后得到"cdefgab"。如果n大于字符串的长度,或者小于等于0,直接返回原字符串。

接下来,我们来看如何实现这一操作。在Java中,可以通过字符串的substring方法来实现。具体来说,可以将字符串分割为两部分:前n个字符和后面的字符,然后将两部分连接起来。例如,字符串s = "abcdefg",n = 2,那么x = s.substring(0, 2) = "ab",剩余部分s = s.substring(2, 7) = "cdefg"。最终的结果就是s + x = "cdefgab"。

但是,需要注意的是,频繁使用substring方法可能会对性能产生影响。为了提高效率,可以考虑将字符串预先转换为字符数组,并使用更高效的方法进行操作。

优化思路

为了优化字符串左旋转操作,可以考虑以下步骤:

  • 检查边界条件:如果n等于0或等于字符串长度,直接返回原字符串。
  • 计算实际旋转次数:由于字符串左旋转n次的效果与左旋转n mod L次相同(L是字符串长度),所以可以先计算n mod L,避免重复旋转。
  • 使用字符数组:将字符串转换为字符数组,可以更高效地操作字符串的字符。
  • 预先分割字符数组:将字符数组分割为两部分,前n个字符和后面的字符。
  • 连接字符数组:将两部分字符数组连接起来,形成最终的旋转后的字符串。
  • 优化代码

    基于上述思路,我们可以编写一个高效的字符串左旋转函数:

    public String reverseLeftWords(String s, int n) {    // 如果n不在有效范围内,直接返回原字符串    if (n <= 0 || n >= s.length()) {        return s;    }    // 计算实际需要旋转的次数    int effectiveRotation = n % s.length();    // 将字符串转换为字符数组    char[] chars = s.toCharArray();    // 分割字符数组    int splitIndex = effectiveRotation;    char[] firstPart = new char[splitIndex];    System.arraycopy(chars, 0, firstPart, 0, splitIndex);    char[] secondPart = new char[s.length() - splitIndex];    System.arraycopy(chars, splitIndex, secondPart, 0, s.length() - splitIndex);    // 重新组合字符串    StringBuilder sb = new StringBuilder();    sb.append(secondPart);    sb.append(firstPart);    return sb.toString();}

    代码解释

  • 检查边界条件:首先检查n是否在有效范围内。如果n小于等于0或大于等于字符串长度,直接返回原字符串。
  • 计算实际旋转次数:使用取模运算,计算实际需要旋转的次数,避免重复旋转。
  • 转换为字符数组:将字符串转换为字符数组,可以更高效地操作字符串的字符。
  • 分割字符数组:将字符数组分割为两部分,前n个字符和后面的字符。
  • 连接字符数组:使用StringBuilder高效地连接两部分字符数组,形成最终的旋转后的字符串。
  • 这种方法不仅提高了效率,还避免了不必要的重复操作,能够在处理较大的字符串时表现更好。

    上一篇:Android xml资源文件中@、@android:type、@*、?、@+含义和区别
    下一篇:题目 1131: [C语言训练]斐波纳契数列 题解

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2026年06月05日 03时28分54秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章