ReverseWordsInSentence(II)
Description
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋操作的功能。例如:输入字符“abcdefg”和数字“2”,则输出“cdefgab”。
Solution1
最简单的想法:找子串,两部分连到一起。
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);
String st1= stringBuilder.substring(i,stringBuilder.length());
String st2= stringBuilder.substring(0,i);
String result = st1.concat(st2); //将st1和st2合并
return result;
}
public static void main(String[] args){
String str = "abcdefghijklmn";
System.out.println(leftRotateString(str,2));
}
}
Solution2
三次调用之前的reverse函数,即可实现左旋功能
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();
}
//翻转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));
}
}
Appendix
1.58翻转字符串