剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
限制:
1 <= k < s.length <= 10000
解题思路
该题有多种解题方法:
-
直接使用Java String.substring()与 String.concat() 函数
class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n,s.length()).concat(s.substring(0,n)); } }
-
遍历字符串
class Solution { public String reverseLeftWords(String s, int n) { char[] array = new char[s.length()]; int m = 0; for(int i=n;i<s.length();i++) { array[m++] = s.charAt(i); } for(int i=0;i<n;i++) { array[m++] = s.charAt(i); } return new String(array); } }
-
使用 队列结构 (先进先出结构)
class Solution { public String reverseLeftWords(String s, int n) { Queue<Character> queue = new LinkedList<Character>(); StringBuilder str = new StringBuilder(s); for(int i=0;i<n;i++) { queue.offer(s.charAt(i)); } str.delete(0,n); //StringBuilder的函数,删除部分字符 while(!queue.isEmpty()) { str.append(queue.poll()); } return str.toString(); } }