劍指offer第二版-58.2.左旋轉(zhuǎn)字符串

本系列導(dǎo)航:劍指offer(第二版)java實(shí)現(xiàn)導(dǎo)航帖

面試題58.2:左旋轉(zhuǎn)字符串

題目要求:
實(shí)現(xiàn)一個(gè)函數(shù)完成字符串的左旋轉(zhuǎn)功能。比如,輸入abcdefg和數(shù)字2,輸出為cdefgab。

解題思路:
類似于58.翻轉(zhuǎn)單詞順序。首先對于字符串“abcdefg”整體翻轉(zhuǎn),得到“gfedcba”;然后對于后2個(gè)字符“ba”進(jìn)行翻轉(zhuǎn),對于剩下的字符“gfedc”進(jìn)行翻轉(zhuǎn),得到“cdefgab”。

package chapter6;

/**
 * Created with IntelliJ IDEA
 * Author: ryder
 * Date  : 2017/8/18
 * Time  : 16:05
 * Description:左旋轉(zhuǎn)字符串
 * abcdeftg 2 => cdefgab
 **/
public class P286_LeftRotateString {
    public static String leftRotateString(String str,int i){
        if(str==null||str.length()==0||i<=0||i>=str.length())
            return str;
        StringBuilder stringBuilder = new StringBuilder(str);
        reverseSubString(stringBuilder,0,stringBuilder.length()-1);
        reverseSubString(stringBuilder,0,stringBuilder.length()-i-1);
        reverseSubString(stringBuilder,stringBuilder.length()-i,stringBuilder.length()-1);
        return stringBuilder.toString();
    }
    //翻轉(zhuǎn)stringBuilder[start,end]
    public static void reverseSubString(StringBuilder stringBuilder,int start,int end){
        for(int i=start;i<=start+(end-start)/2;i++){
            char temp = stringBuilder.charAt(i);
            stringBuilder.setCharAt(i,stringBuilder.charAt(end-i+start));
            stringBuilder.setCharAt(end-i+start,temp);
        }
    }
    public static void main(String[] args){
        String str = "abcdefg";
        System.out.println(leftRotateString(str,2));
    }
}

運(yùn)行結(jié)果

cdefgab
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容