剑指 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 @   堤苏白  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示