java 字符串旋转_Java之左旋转字符串
如果你对Java的字符串还不是很了解,那可以先看看这篇Java之左旋转字符串,希望本文所提供知识点可以帮助到你,下面随爱站技术小编来一起看看吧。
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
分析:如果不考虑时间和空间复杂度的限制,最简单的方法莫过于把这道题看成是把字符串分成前后两部分,通过旋转操作把这两个部分交换位置。于是我们可以新开辟一块长度为n+1的辅助空间,把原字符串后半部分拷贝到新空间的前半部分,在把原字符串的前半部分拷贝到新空间的后半部分。不难看出,这种思路的时间复杂度是O(n),需要的辅助空间也是O(n)。
接下来的一种思路可能要稍微麻烦一点。我们假设把字符串左旋转m位。于是我们先把第0个字符保存起来,把第m个字符放到第0个的位置,在把第2m个字符放到第m个的位置…依次类推,一直移动到最后一个可以移动字符,最后在把原来的第0个字符放到刚才移动的位置上。接着把第1个字符保存起来,把第m+1个元素移动到第1个位置…重复前面处理第0个字符的步骤,直到处理完前面的m个字符。
该思路还是比较容易理解,但当字符串的长度n不是m的整数倍的时候,写程序会有些麻烦,感兴趣的朋友可以自己试一下。由于下面还要介绍更好的方法,这种思路的代码我就不提供了。
我们还是把字符串看成有两段组成的,记位XY。左旋转相当于要把字符串XY变成YX。我们先在字符串上定义一种翻转的操作,就是翻转字符串中字符的先后顺序。把X翻转后记为XT。显然有(XT)T=X。
我们首先对X和Y两段分别进行翻转操作,这样就能得到XTYT。接着再对XTYT进行翻转操作,得到(XTYT)T=(YT)T(XT)T=YX。正好是我们期待的结果。
分析到这里我们再回到原来的题目。我们要做的仅仅是把字符串分成两段,第一段为前面m个字符,其余的字符分到第二段。再定义一个翻转字符串的函数,按照前面的步骤翻转三次就行了。时间复杂度和空间复杂度都合乎要求。
public class Test_21 {
public static void main(String[] args){
StringBuilder str = new StringBuilder("abcde");
int index =5;
System.out.println(LeftTurn(str,index));
}
public static String LeftTurn(StringBuilder sb,int index){
int strlen = sb.length();
if(sb !=null&&index>=0&&index<=strlen){
int firststart = 0;
int firstend = index-1;
int secondfirst = index;
int secondend = strlen-1;
ReverseString(sb,firststart,firstend);
ReverseString(sb,secondfirst, secondend);
ReverseString(sb,firststart,secondend);
return sb.toString();
}
return null;
}
public static void ReverseString(StringBuilder str,int begin, int end){
while(begin<=end){
char temp = str.charAt(begin);
str.setCharAt(begin, str.charAt(end));
str.setCharAt(end, temp);
begin++;
end--;
}
System.out.println(str);
}
}
到这里,Java之左旋转字符串就讲完了。如果有什么不清楚可以留言给我。如果觉得我写得不错的话,请给我一个大拇指,谢谢!
java 字符串旋转_Java之左旋转字符串相关推荐
- java比较两个字符串变量_Java 比较两个字符串内容是否相等
最近在做松哥的微人事项目时,编写SpringBoot后台接口时遇到一个小问题,就是当比较两个String对象内容是否相等时,我第一次使用==没有得到预想到的结果,改成String的equals()方法 ...
- java字符串序列化_java对象序列化为字符串
1 场景 java对象某些时候,需要序列化成字符串存储在数据库中,需要的时候,再将字符串反序列化为java对象. 如使用shiro缓存分布式session,需要将session对象序列化成字符串存储在 ...
- java怎么实现字符串反转_Java多种方法实现字符串反转!
来自牛客网 题目描述 接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000). 示例 输入:abcdefg 输出:gfedcba 解决思路 (主函数中实现)1. ...
- java整形怎么转字符串型_java整型与字符串互转
JAVA的整型与字符串相互转换 1字串 String 转换成整数 int 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt( ...
- java 解析二进制_java实现解析二进制文件(字符串、图片)
1.需求说明,实现细节要求: 解析二进制文件 files\case10\binary,其中包含一个字符串和一张图片,数据文件格式为字符串数据长度(2字节)+字符串内容+图片数据长度(4字节)+图片数据 ...
- java中判断字符串乱码_java中如何判断字符串是否乱码
java中如何判断字符串是否乱码 发布时间:2020-06-18 13:43:41 来源:亿速云 阅读:113 作者:鸽子 项目中有一个功能 在IE中GET方式提交会产生乱码 但有两个入口都会走这同一 ...
- java两个字符串前缀_java – 找到两个字符串的最长公共前缀
我想找到两个字符串的最长公共前缀. 有没有办法循环我的最后几个if语句,以便我可以结束彼此不匹配的最后几个字符? System.out.println("Enter the first st ...
- java 字符串模糊搜索_Java中的模糊字符串搜索库
您可以使用Apache Lucene,但根据用例,这可能是太重了.对于非常简单的模糊搜索,使用它可能有点复杂(如果我错了,请纠正我)它需要您构建索引. 如果您需要一个简单的在线(=不维护索引)算法,您 ...
- java 图片旋转_Java实现图片旋转、指定图像大小和水平翻转|chu
本文实例为大家分享了Java实现图片旋转.指定图像大小.水平翻转,供大家参考,具体内容如下 package com.zeph.j2se.image; import java.awt.Graphics2 ...
最新文章
- 获得指定的配置文件中的数据
- ubuntu设置字体编码GBK和UTF-8
- Pandas: 如何将一列中的文本拆分为多行?
- 07.必须修正致命弱点摘录——卓越领导者
- 资源大集中 浪潮I9000刀片为国家税务总局打造全能型平台
- 安全——《微服务设计》读书笔记
- 大数据技术之kafka (第 3 章 Kafka 架构深入) Kafka 事务
- ELK Stack 的应用场景
- 数据结构实验 9.求逆序对数
- ServHa双机热备简单配置
- 接口开发规范 restful接口开发规范
- (初学者)初学者的编程的苦恼
- Unity3D mac版汉化教程
- SVN 使用beyondcompare 来版本对比
- 基于matlab实现数字图像处理之图像复原
- Conficker蠕虫作者可随时引爆“网络核武”
- 常用的oracle数据库备份方式
- 微信小程序跳转公众号h5页面
- 皮特测评:蓝牙耳机哪个品牌最好?300元内最好的蓝牙耳机
- 绝望爱の歌---最终兵器彼女