题1:左旋转字符串
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
示例1
输入
"abcXYZdef",3
返回值
"XYZdefabc"
解析:
-
实例分析:
-
要运用题目左循环的含义:
说人话就是挤出字符串中的前n位并依次拼接到原字符串后面
具体过程: 输入:abcXYZdef,3 移动位数 输入 输出 1 ·a·bcXYZdef bcXYZdef·a· 2 ·b·cXYZdefa cXYZdefa·b· 3 ·c·XYZdefab XYZdefab·c· 输出:XYZdefabc
输入 左移位数 输出 abcXYZdef 3 XYZdefabc abcXYZdef 4 YZdefabcX abcXYZdef 6 defabcXYZ ...以此类推
-
-
规律发现:
输入 左移位数 输出 (abc)XYZdef 3 XYZdef(abc) (abcX)YZdef 4 YZdef(abcX) (abcXYZ)def 6 def(abcXYZ) ...
根据上述例子总结得:
左移字符串实际上:将以第n位字符分成两部分,将(0,n)字符串拼接在原字符串后即可。
-
在Java语言当中 String类中的substring()方法正好满足此要求:
-
substring() 方法返回字符串的子字符串。菜鸟教程
语法
public String substring(int beginIndex) 或 public String substring(int beginIndex, int endIndex)
参数
- beginIndex – 起始索引(包括), 索引从 0 开始。
- endIndex – 结束索引(不包括)。
返回值
子字符串。
-
解答:
public String LeftRotateString(String str,int n) {
if(n > str.length())
return str;
//新字符串从第n位字符开始,拼接(0 ~ n-1)位字符
String s = str.substring(n,str.length()) + str.substring(0,n);
return s;
}
补充:
-
面试题,请反转一个字符串:即输入"abc123" ,输出“321cba”,尝试下有几种方法?
//1.用 StringBuffer 或 StringBuilder 的 reverse 方法: public static String reverse1(String str) { return new StringBuilder(str).reverse().toString(); } //2. 用 String 的 toCharArray 方法先将字符串转化为 char 类型数组, // 然后反向遍历各个字符进行重新拼接: public static String reverse2(String str) { char[] chars = str.toCharArray(); String reverse = ""; for (int i = chars.length - 1; i >= 0; i--) { reverse += chars[i]; } return reverse; } //3.用charAt()方法逆向拼接 public static String reverse3(String str) { String reverse = ""; int length = str.length(); for (int i = 0; i < length; i++) { reverse = str.charAt(i) + reverse; } return reverse; }