剑指 Offer 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2 输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
解法一:非原地修改,先读取下标k(包含k)以后位置的元素,再从头读取到位置k的所有元素
class Solution { public String reverseLeftWords(String s, int n) { StringBuilder sb = new StringBuilder(); for (int i = n; i < s.length(); i++) { sb.append(s.charAt(i)); } for (int i = 0; i < n;i++) { sb.append(s.charAt(i)); } return sb.toString(); } }
解法二:原地修改,空间复杂度为O(1)
class Solution { public String reverseLeftWords(String s, int n) { int k = s.length(); char[] res = s.toCharArray(); reverseString(res,0,n-1); reverseString(res,n,k-1); reverseString(res,0,k-1); return new String(res); } private void reverseString(char[] s,int left,int right) { while (right > left) { char tmp = s[left]; s[left] = s[right]; s[right] = tmp; left++; right--; } } }