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