当前位置: 首页 > news >正文

剑指OfferII-58.左旋转字符串

剑指OfferII-58.左旋转字符串

目录

  • 剑指OfferII-58.左旋转字符串
    • 题目描述
    • 解法一:字符数组
    • 解法二:原地反转

题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。

请定义一个函数实现字符串左旋转操作的功能。

比如,输入字符串“abcdefg”和数字2,该函数将返回左旋转两位得到的结果“cdefgab”。
在这里插入图片描述

解法一:字符数组

我对于这道题的第一反应是,我可以声明一个char型数组,来对字符串中的字符进行操作,最后再将char型数组转为字符串返回

思路是这样的

  • 声明一个index指针,指向char型数组的倒数第k个位置
  • 从该指针的位置开始一直到数组的末尾,插入字符串中的前k的字符,也就是待旋转的字符
  • 插入完成后,再将字符s剩下的字符依次插入数组中,完成拼接
  • 返回
    public String reverseLeftWords(String s, int n) {//申请额外的数组空间char[] ans = new char[s.length()];//申请一个指针,指针指向的位置是char数组对应的前n个字符串末尾的位置int index = s.length()-n;for(int i=0;i<n;i++){//将前n个字符放到char数组末尾ans[index++] = s.charAt(i);}//将后部分要旋转的字符填充完后,再平移前面的字符for(int i=n,j=0;i<s.length();i++){ans[j++] = s.charAt(i);}return new String(ans);}

解法二:原地反转

为了让本题更有意义,提升一下本题难度:不能申请额外空间,只能在本串上操作

那么我们可以想一下上一题目反转字符串中的单词 (opens new window)中讲过,使用整体反转+局部反转就可以实现反转单词顺序的目的。

这道题目也非常类似,依然可以通过局部反转+整体反转 达到左旋转的目的。

步骤如下:

  • 1、反转区间为[0,n]的子串
  • 2、反转区间为[n,s.length()]的子串
  • 3、反转整个字符串

如图所示

在这里插入图片描述

    public String reverseLeftWords(String s, int n) {int len = s.length();StringBuilder sb = new StringBuilder(s);//反转区间为[0,n]的子串reverseString(sb,0,n-1);//反转区间为[n,s.length()]的子串reverseString(sb,n,len-1);//反转整个字符串return sb.reverse().toString();}public void reverseString(StringBuilder sb,int start,int end){while(start<end){char temp = sb.charAt(start);sb.setCharAt(start,sb.charAt(end));sb.setCharAt(end,temp);start++;end--;}}
http://www.lryc.cn/news/109836.html

相关文章:

  • C语言每日一题:14《数据结构》复制带随机指针的链表
  • MySql008——检索数据:过滤数据(WHERE子句的使用)
  • vue2-v-show和v-if有什么区别,使用场景分别是什么?
  • 常用的排序算法简介:冒泡、选择、插入、归并、快速
  • Golang之路---04 项目管理——编码规范
  • hcip——期中小试
  • 华云安参编的《云原生安全配置基线规范》正式发布
  • 【计算机网络】NAT技术
  • Jenkins工具系列 —— 插件 实现用户权限分配与管理
  • 智能文件批量改名工具,自定义重命名,格式转换一步到位!
  • Python | threading
  • Unity数字可视化学校_昼夜(二)
  • 嘉楠勘智k230开发板上手记录(二)
  • flex 弹性布局
  • 【C# 基础精讲】为什么选择C# ?
  • HCIP BGP选路规则总结
  • UE4 Cesium for unreal 离线加载应用全流程
  • 翻转卡片游戏【力扣822】
  • 嵌入式开发学习(STC51-5-数码管)
  • JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础实战
  • docker-compose实现mysql主从复制
  • hbase基础
  • 【GitOps系列】如何实施自动化渐进式交付?
  • 【网络】网络层(IP协议)
  • Unity数字可视化学校_昼夜(一)
  • QWidget样式
  • TypeScript基础学习
  • AOF日志:宕机了,Redis如何避免数据丢失
  • 【编程】典型题目:寻找数组第K大数(四种方法对比)
  • Vue3 对比 Vue2 的变化