编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.翻转字符串
  • 02.字符串替换空格
  • 03.把字符串转换成整数
  • 04.回文字符串
  • 05.字符串的排列
  • 06.第一个只出现一次的字符
  • 07.把字符串转换成整数
  • 08.翻转单词顺序
  • 09.左旋转字符串
  • 10.表示数值字符串
  • 11.查找最长公共前缀
  • 12.第一个不重复的字符

09.左旋转字符串

目录介绍

  • 01.题目要求
  • 02.问题分析
  • 03.实例代码
  • 04.测试代码

01.题目要求

  • 问题如下所示:
    • 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。
  • 示例 :
    比如输入字符串”abcdefg”和数字2,该函数将返回左旋转2 位得到的结”cdefgab”。
    比如输入字符串”yangchong”和数字3,该函数将返回左旋转2 位得到的结”gchongyan”。

02.问题分析

  • 以”abcdefg”为例,我们可以把它分为两部分。由于想把它的前两个字符移到后面,我们就把前两个字符分到第一部分,把后面的所有字符都分到第二部分。
  • 我们先分别翻转这两部分,于是就得到”bagfedc”。
  • 接下来我们再翻转整个字符串, 得到的”cdefgab”就是把原始字符串左旋转2 位的结果。

03.实例代码

  • 如下所示
    /**
     * 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
     * 请定义一个函数实现字符串左旋转操作的功能。
     * @param data
     * @param n
     * @return
     */
    public static char[] leftRotateString(char[] data, int n) {
        if (data == null || n < 0 || n > data.length) {
            return data;
        }
    
        reverse(data, 0, data.length - 1);
        reverse(data, 0, data.length - n - 1);
        reverse(data, data.length - n, data.length - 1);
    
        return data;
    }
    /**
     * 将data中start到end之间的数字反转
     *
     * @param data
     * @param start
     * @param end
     */
    public static void reverse(char[] data, int start, int end) {
        if (data == null || data.length < 1 || start < 0 || end > data.length || start > end) {
            return;
        }
    
        while (start < end) {
            char tmp = data[start];
            data[start] = data[end];
            data[end] = tmp;
    
            start++;
            end--;
        }
    }

04.测试代码

  • 代码如下所示
    public static void main(String[] args){
    	String str = "yangchong";
    	char[] charArray = str.toCharArray();
    	char[] reverseString = leftRotateString(charArray,3);
    	StringBuffer sb = new StringBuffer();
    	for(int i=0 ; i<reverseString.length ; i++) {
    		sb.append(reverseString[i]);
    	}
    	System.out.println("yc-------" + sb.toString());
    }
    
    //打印日志
    yc-------gchongyan
贡献者: yangchong211
上一篇
08.翻转单词顺序
下一篇
10.表示数值字符串