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 ...
随机推荐
- USACO 3.1 Contact
http://www.nocow.cn/index.php/Translate:USACO/contact 题目大意:给一个只含0和1的序列,统计每个子序列的重复次数,并按次数递减来输出 考虑子序列时 ...
- IntelliJ Idea14 创建Maven多模块项目,多继承,热部署配置总结(三)
pom.xml中repositories.pluginRepository的作用 pom.xml中repositories标签的作用是: 用来配置maven项目的远程仓库.示例如下: <repo ...
- codingame
无聊登了一下condingame,通知说有本周谜题,正好刚撸完bfs,想尝试下. 题目链接:https://www.codingame.com/ide/17558874463b39b9ce6d4207 ...
- JS插件:fullCalendar图解
1.首先看下效果: 官网下载链接 https://fullcalendar.io/download .官方效果图:https://fullcalendar.io/ 2.准备工作,引入对应的 css和 ...
- Python脚本:实现excel表格导入到数据库,支持mysql,postgresql,MongoDB
import xlrd,re from datetime import datetime from xlrd import xldate_as_tuple # 判断上传表格是否与模板要求一致 def ...
- ASHRAE KAGGLE大能源预测(前三名方案总结+相关知识点讲解+python实现)
@ 目录 1 概述 2 处理思想学习 2.1 移除异常值 2.2 缺失值 2.3 目标函数 2.4 特征工程 2.4.1 Savitzky-Golay filter 2.4.2 Bayesian ta ...
- jQuery的插件和跨域、ajax
1. 插件: 也称组件 什么是: 拥有专属的HTML,CSS和js的独立页面区域 为什么: 重用! 何时: 只要一个功能/区域可能被反复使用时 如何: 3个来源: 1. 官方插件:jquery ui ...
- 08 返回动态页面web框架
08 返回动态页面web框架 动态页面: 网页的内容是动态变化的,不是一直不变的(静态页面:每次显示的内容都是一样) 服务器server端python程序(动态页面版本): import socket ...
- js时间戳转为日期格式的方法
Date.prototype.Format = function(fmt){ var o = { "M+" : this.getMonth()+1, //月份 "d+&q ...
- SSL F5
应用交付领域经常提到SSL加速,但SSL加速到底是什么意思?SSL加速和F5指什么意思呢?在网上查询和整理了一些关于SSL加速和F5的相关解释,仅供参考:SSL加速:加密套接层协议(简称SSL)是网络 ...