LintCode-8 · 旋转字符串

这篇博客主要探讨了如何原地旋转字符串的方法,通过三步反转策略实现。首先将字符串分为两部分,然后分别反转这两部分,最后再反转整个字符串,从而达到旋转的效果。这种方法适用于不同编程语言,如Java、Python和C++。示例代码展示了如何处理各种情况,包括空字符串和不同长度的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述
给定一个字符串str和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
对于不同的语言,str将以不用的形式给出,例如对于字符串 “abc” ,将以下面的形式给出

Java: char[] str = {‘a’, ‘b’, ‘c’};
Python:str = [‘a’, ‘b’, ‘c’]
C++:string str = “abc”;
在这里插入图片描述
样例
样例 1:

输入:
在这里插入图片描述
输出:
在这里插入图片描述
解释:
注意是原地旋转,即str旋转后为"efgabcd"

样例 2:
输入:
在这里插入图片描述
输出:
在这里插入图片描述
解释:
注意是原地旋转,即str旋转后为"gabcdef"

样例 3:
输入:
在这里插入图片描述
输出:
在这里插入图片描述
解释:

注意是原地旋转,即str旋转后为"gabcdef"

样例 4:
输入:
在这里插入图片描述
输出:
在这里插入图片描述
解释:
注意是原地旋转,即str旋转后为"fgabcde"

样例 5:
输入:
在这里插入图片描述
输出:
在这里插入图片描述
解释:
注意是原地旋转,即str旋转后为"efgabcd"

代码示例

三步反转
此方法分3个步骤:
(1)将原字符串分为X和Y两部分,其中X为“abc”,Y为“def”;
(2)将X的所有字符反转,即相当于将“abc”变为“cba”;对Y也进行反转,由“def”变为“fed”;
(3)最后,将上述步骤得到的结果整体再进行反转,即将“cbafed”整体反转为“defabc”,这样就实现了字符串旋转。

public class Solution {
    /**
     * @param s: An array of char
     * @param offset: An integer
     * @return: nothing
     */
    public void rotateString(char[] s, int offset) {
        // write your code here
        int len = s.length;
        if(s==null||s.length==0) return;
        offset = offset%len;
        reserve(s, 0, len-offset-1);
        reserve(s, len-offset, len-1);
        reserve(s, 0, len-1);
    }
    public void reserve(char[]s,int left,int right){
        while(left<right){
            char tmp = s[left];
            s[left++]=s[right];
            s[right--]=tmp;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值