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;
}