Java实现字符串的旋转
1 问题描述
给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串“abcdef”的前3个字符‘a’、‘b’和‘c’移到字符串的尾部,那么原字符串将变成“defabc”。请写一个函数实现此功能。
2 解决方案
2.1 蛮力移位
此方法将需要移动的字符一个一个地移到字符串的尾部,具体代码如下:
package com.liuzhen.string_1;
public class StringRevolve {
//方法1:蛮力移位
/*
* 参数s:给定字符串
* 返回每次移动一位后的结果字符串
*/
public String bruteOne(String s){
char[] A = s.toCharArray();
char temp = A[0];
for(int i = 1;i < A.length;i++)
A[i-1] = A[i];
A[A.length-1] = temp;
return String.valueOf(A);
}
/*
* 参数s:给定字符串
* 参数m:字符串前面需要移动的字符个数
* 返回最终移动目标字符串
*/
public String bruteRevolve(String s,int m){
for(int i = m;i > 0;i--){
bruteOne(s);
System.out.println(bruteOne(s));
s = bruteOne(s);
}
return s;
}
public static void main(String[] args){
StringRevolve test = new StringRevolve();
String s = "abcdef";
String result = test.bruteRevolve(s,8);
System.out.println("使用蛮力移位法得到结果:"+result);
}
}
运行结果:
bcdefa
cdefab
defabc
efabcd
使用蛮力移位法得到结果:efabcd
2.2 三步反转
此方法分3个步骤:
(1)将原字符串分为X和Y两部分,其中X为“abc”,Y为“def”;
(2)将X的所有字符反转,即相当于将“abc”变为“cba”;对Y也进行反转,由“def”变为“fed”;
(3)最后,将上述步骤得到的结果整体再进行反转,即将“cbafed”整体反转为“defabc”,这样就实现了字符串旋转。
具体代码如下:
package com.liuzhen.string_1;
public class StringRevolve {
//方法2:三步反转
/*
* 参数A:字符串转化后的字符数组
* 参数start:开始进行反转的字符位置
* 参数end:进行字符反转的最后一个字符位置
*/
public void revolveString(char[] A,int start,int end){
while(start < end){
char temp = A[start];
A[start++] = A[end];
A[end--] = temp;
}
}
/*
* 参数s:给定字符串
* 参数m:字符串前面需要移动的字符个数
*/
public String getRevolveString(String s,int m){
char[] A = s.toCharArray();
int len = s.length(); //字符串的总长度
m = m % len; //如果移动位数大于字符串总长度,则其移动位数默认为m取余len
revolveString(A,0,m-1);
revolveString(A,m,len-1);
revolveString(A,0,len-1);
return String.valueOf(A);
}
public static void main(String[] args){
StringRevolve test = new StringRevolve();
String s = "abcdef";
String result1 = test.getRevolveString(s, 4);
System.out.println("使用三步反转法得到结果:"+result1);
}
}
运行结果:
使用三步反转法得到结果:efabcd
Java实现字符串的旋转的更多相关文章
- Java常量字符串String理解
Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用 "eq ...
- Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0
课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值 String str=& ...
- java截取字符串中的数字
java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...
- 三张图彻底了解Java中字符串的不变性
转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- Java:字符串类String的功能介绍
在java中,字符串是一个比较常用的类,因为代码中基本上处理的很多数据都是字符串类型的,因此,掌握字符串类的具体用法显得很重要了. 它的主要功能有如下几种:获取.判断.转换.替换.切割.字串的获取.大 ...
- Java空字符串与null的区别和判断字符串是否为空的方法
Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...
- android112 jni 把java的字符串转换成c的字符串,数组处理
package com.itheima.charencode; import android.os.Bundle; import android.app.Activity; import androi ...
随机推荐
- 疑问_网址参数不同的时候改如何选择_MySQL_芬兰站
豹子安全-注入工具-疑问_网址参数不同的时候改如何选择_MySQL_芬兰站_kouvolankipparit.fi_基于联合查询_20200416 www.leosec.net 请看下列GIF视频:
- 复习MintUI
一.表单----复选框列表 1.<mt-checklist title="标题" options="['a','b','c']" #选项列表 v-mode ...
- Python 如何随机打乱列表(List)排序
场景: 现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出. 专业点的术语:将一个容器中的数据每次随机逐个遍历一遍. 注意:不是生成一个随机的 ...
- Windows10下打开MySQL服务 & 查看MySQL服务是否启动
首先 确保电脑已安装MySQL客户端 其次 以管理员方式,打开Windows PowerShell 输入: net start mysql 回车 如下图: 可以了.
- poj2762 判断一个图中任意两点是否存在可达路径 也可看成DAG的最小覆盖点是否为1
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 179 ...
- Lightoj1356
题目链接:https://vjudge.net/problem/LightOJ-1356 题目大意: T个 test case,每个 test case 给出一个 N 个数的集合.请找出一个最大的子集 ...
- 基于postman测试接口(整套接口测试)
基于postman测试接口(整套接口测试) 可以解决的问题 几百个接口人工测试接口过于繁杂 大多测试无法使用请求结果当参数 可以使用随机参数 支持swagger信息导入 随账号持久化保存数据 对集合一 ...
- SpringBoot2.1电商通用(微信+支付宝)支付系统实战
『课程目录』: ├─第10章 全模块电商系统之商品模块 │ 10-1_商品列表-上.mp4 │ 10-2_商品列表-中.mp4 │ 10-3_商品列表-下.mp4 │ ...
- AspectJ JoinPoint及ProceedingJoinPoint 简要api文档
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点 ...
- 【C++】VS Code配置
0.前言 本文已配置C++环境为例,本文主要是面向刚开始接触VS Code的朋友,采用生成默认配置任务的方法,在编写本文过程中大量参考了官方文档,感兴趣的朋友可直接前往传送门. 环境: win10 + ...