【劍指offer】58 - II. 左旋轉字符串

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章