更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~
T:
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
片段截取法
这种方法,相对于最笨的方法来说,已经做了改进。
-
改进的地方在于:
- 如果循环左移的次数超过字符串的长度,比如长度为3,但是循环左移100次,那么前99次都是做的无用功,因为在移动99次之后,又回到了原点。
我的code:
/**
* T: 左旋转字符串
*
* 题目描述
* 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。
* 对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,
* 要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
*
* date: 2015.12.10 21:07
* @author SSS
*
*/
public class Solution {
public String LeftRotateString(String str,int n) {
String resultStr = str;
if (str == null || str.length() == 0) {
return resultStr;
}
int len = str.length();
int indexOfLeftRoate = n % len;
if (indexOfLeftRoate != 0) {
String clipStr = str.substring(0, indexOfLeftRoate);
String restStr = str.substring(indexOfLeftRoate);
resultStr = restStr + clipStr;
}
return resultStr;
}
}
字符串拼接
这种方法,从时间复杂度上来讲,与上一种解法一样,都是 O ( n ) O(n) O(n),但是从技巧性来说,这种方法更胜一筹。不多解释,代码很简单,一看就明白这一筹胜在哪儿了。。。
我的code:
/**
* T: 左旋转字符串
*
* 题目描述
* 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。
* 对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,
* 要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
*
* date: 2015.12.10 21:26
* @author SSS
*
*/
public class Solution {
public String LeftRotateString(String str,int n) {
if (str == null || str.length() == 0) {
return str;
}
int len = str.length();
int index = n % len;
str += str;
return str.substring(index, index + len);
}
}
更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~