字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”

本文介绍了两种方法实现字符串的循环左移操作。方法1通过将字符串切割并重新组合实现,方法2则采用O(n)时间和O(n)空间复杂度的解决方案。

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

方法1

    private static String LeftRotateString1(String str,int n) {
        if(str.length() == 0||str == null || n < 0) return str;
        n = n % str.length();
        return str.substring(n) + str.substring(0, n);
    }

这个方法直接将向左循环出去的子字符串直接连接到剩下的字符串后,因为是循环,所以要对左移次数对字符串长度取模;
注意:String.substring(0,n);这个方法是相当于【0,n),右边是开的,子字符串中不会包含第n个字符;

方法2

        public String LeftRotateString2(String str,int n)
        {
            char []c=str.toCharArray();
            if(c.length<n)return "";
            //先逆序被移位出去的那些字符     例如[a,b,c,d,e] n = 3 ---> [c,b,a,d,e]
            reverse(c,0,n-1);
            //再逆序剩下的那些字符      -----> [c,b,a,e,d]            
            reverse(c,n,c.length-1);
            //再将整个字符数组逆序一遍   ---->[d,e,a,b,f]
            reverse(c,0,c.length-1);
            StringBuilder sb=new StringBuilder();
            for(char t:c)sb.append(t);
            return sb.toString();
        }
        public void reverse(char []c,int low,int high)
        {
            while(low<high)
            {
                char temp=c[low];
                c[low]=c[high];
                c[high]=temp;
                low++;
                high--;
            }
        }

这个方法的时间复杂度是O(n),空间复杂度是O(n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值