本文主要是介绍[编程之美] 2.17 字符串循环移位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
将字符串向右循环移动 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));}
}
这篇关于[编程之美] 2.17 字符串循环移位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!