左旋字符串的题解

在这里插入图片描述

第一种解法
public class Solution {
//在做这道题的时候,首先先将字符串转换为字符数组的形式,写一个函数进行一次左移,
//在主函数中我们可以通过左移次数来进行循环左移在循环体中调用刚才写好的一次左移方法。
public static void swap(char[] ch){
char tmp = ch[0];//这里代表的是提前将要左移的字符取出来放到tmp临时变量中去,以方便后面的字符能够左移。
int i =0;
for(;i<ch.length-1;i++){
ch[i] = ch[i+1];//这里的意思是将数组中的每位都向前挪动一位,给左移过来的字符腾出位置
}
ch[i] = tmp;
}
public String LeftRotateString(String str,int n) {
if(str.length() ==0||n<=0){
return str;
}
int k = n%str.length();
char[] ch = str.toCharArray();
while(k>0){
swap(ch);
k–;
}
return new String(ch);
}
}
第二种解法
public class Solution {
public static void swap(char[] ch ,int start,int end){

    while(start<end){
        char tmp = ch[end];
        ch[end] = ch[start];
        ch[start] = tmp;
        start++;
        end--;
    }
}
public String LeftRotateString(String str,int n) {
   if(str.length()==0||n<=0){
       return str;//判断要不要移动str
   } 
    n %= str.length();//不管什么方法都要进行取余运算,这样大大减少了移动次数
    //举个例子我们的n=11,也就是要移动的次数是11,而我们字符串的长度是5
    //此时如果不取余的话就多移动了1次,因为对于长度为5的字符串挪动十次也就相当于
    //之挪动1次而已。
    char[] ch = str.toCharArray();
    swap(ch,0,n-1);
    swap(ch,n,ch.length-1);
    swap(ch,0,ch.length-1);
    return new String(ch);
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值