博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java】 剑指offer(58-2) 左旋转字符串
阅读量:5278 次
发布时间:2019-06-14

本文共 1176 字,大约阅读时间需要 3 分钟。

 

本文参考自《剑指offer》一书,代码采用Java语言。

更多:  

题目

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

思路

  最初的想法是令chars[i] = chars[i+n],将后面的数字都往前移,最后面空出的位置放入前面的数字,如abcdef,n=2时,将c放入a的位置,e放入c的位置,a放入e的位置,b也同理,就可以得到cdefab了。但是这没有考虑到最后空出的位置是否正确,例如abcdefg中,同样的方法将会得到cdeba,答案错误,就是因为后面的位置对应不上。思路错误!

  正确思路:本题思路和上一道题的原理一模一样,只是上一道题有空格,这道题没空格,其实这道题还更简单。先分别翻转前半部分字符串和后半部分字符串,最后翻转整个字符串即可。

 

测试算例 

  1.功能测试(对长度为n的字符串,左旋转-1,0,1,2,n-1,n,n+1位)

  2.边界值测试(null)

Java代码

//题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。//请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数//字2,该函数将返回左旋转2位得到的结果"cdefgab"。public class LeftRotateString {    public String leftRotateString(char[] chars,int n) {        if(chars==null ||chars.length<=0)            return String.valueOf(chars);        if(n<=0 || n>chars.length)            return String.valueOf(chars);         reverse(chars,0,n-1);        reverse(chars,n,chars.length-1);        reverse(chars,0,chars.length-1);        return String.valueOf(chars);    }        private void reverse(char[] chars, int start,int end){        while(start

  

收获

  1.这道题看似是移动字符,其实是翻转字符串实现的,要记住这类方法。知识迁移能力呀!

  

更多:  

 

转载于:https://www.cnblogs.com/yongh/p/9963605.html

你可能感兴趣的文章
centos下同时启动多个tomcat
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
0320-学习进度条
查看>>
MetaWeblog API Test
查看>>
移动、尺寸改变
查看>>
c# 文件笔记
查看>>
类和结构
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>