剑指 Offer 58 - II. 左旋转字符串

题目:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

 

示例 1:

输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

 

限制:

  • 1 <= k < s.length <= 10000

 

代码:

思路:三次逆置,移k位此例子为2位

如:abcdefg

第一次和第二次逆置:bagfedc,以下标k-1为分界,0-k-1逆置,k-n-1又执行一次逆置

第三次逆置:0-n-1即全下标逆置。即可得到解

 1 //好题,和将一个数组向右移k位是同题型.就是三次逆置解决问题
 2 class Solution {
 3     public String reverseLeftWords(String s, int n) {
 4         //移s长度的倍数
 5         if(n%s.length()==0){
 6             return  s;
 7         }
 8         n=n%s.length();
 9         StringBuilder sb=new StringBuilder();
10 
11         String str1=s.substring(0,n);
12         String str2=s.substring(n,s.length());
13         
14         //在原内存逆置,所以要新开辟空间存放逆置后的字符串
15         StringBuilder sb1=new StringBuilder(sb.append(str1).reverse()) ;
16         sb.delete(0,sb.length());
17         StringBuilder sb2=new StringBuilder(sb.append(str2).reverse()) ;
18         sb.delete(0,sb.length());
19         return sb.append(sb1).append(sb2).reverse().toString();
20     }
21 }

 

 

posted @ 2021-04-11 15:20  堤苏白  阅读(61)  评论(0)    收藏  举报