本系列導(dǎo)航:劍指offer(第二版)java實現(xiàn)導(dǎo)航帖
面試題58.2:左旋轉(zhuǎn)字符串
題目要求:
實現(xiàn)一個函數(shù)完成字符串的左旋轉(zhuǎn)功能满粗。比如辈末,輸入abcdefg和數(shù)字2,輸出為cdefgab映皆。
解題思路:
類似于58.翻轉(zhuǎn)單詞順序挤聘。首先對于字符串“abcdefg”整體翻轉(zhuǎn),得到“gfedcba”捅彻;然后對于后2個字符“ba”進行翻轉(zhuǎn)组去,對于剩下的字符“gfedc”進行翻轉(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));
}
}
運行結(jié)果
cdefgab