题目
将字符串向右循环移动 k 位
s = "abcd123" k = 3
Return "123abcd"
思路
方法一 翻转法
将子串 s[0:str.length() - k)] 翻转,子串s[str.length() - k,str.length()] 翻转。然后将整个字符翻转可以到最终结果。
eg:
将 abcd123 中的 abcd 和 123 单独翻转,得到 dcba321,然后对整个字符串进行翻转,得到 123abcd。
class Solution {
public String reverseString(String str1) {
char[] chs = str1.toCharArray();
for(int i =0,j = str1.length()-1;i<j;i++,j--){
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
return new String(chs);
}
public String turnright(String str,int k){
String substr1 = reverseString(str.substring(0,str.length() - k));
String substr2 = reverseString(str.substring(str.length() - k,str.length()));
return reverseString(substr1+substr2);
}
}
public class Main {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.turnright("abcd123",3));
}
}
方法二 扩展法
生成新 ss = s+s,取ss[str.length() - k:str.length() - k + str.length()]
class Solution {
public String turnright(String str,int k){
String ss = str+str;
return ss.substring(str.length()-k,str.length()-k+str.length());
}
}
public class Main {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.turnright("abcd123",3));
}
}