58 - II. 左旋转字符串面试题58 - II. 左旋转字符串
难度简单24
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2 输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"面试题58 - II. 左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = "abcdefg", k = 2 输出: "cdefgab" 示例 2: 输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"
// time : O(n) space : O(1)
// 思路 abcd n = 2 ab >ba cd > dc badc cdab
public String reverseLeftWords(String s, int n) {
if(s.length() < n) return s;
char [] ch = s.toCharArray();
//转换前半部分
reverse(ch,0,n-1);
//转换后半部分
reverse(ch,n,s.length()-1);
//转换整体
reverse(ch,0,s.length()-1);
return new String(ch);
}
private void reverse(char []ch,int i,int j){
while(i<j){
swap(ch,i++,j--);
}
}
//交换
private void swap(char [] ch,int i,int j){
char tmp = ch[i];
ch[i] = ch[j];
ch[j] = tmp;
}