今天听左大神讲了一个和字符串有关的问题感觉挺有意思的决定把它实现一下。
题目:给定一个字符串str,和一个整数i,i代表str中的位置,将str[0,i]移到右侧,str[i+1,N-1]移到左侧(N为字符串长度)。
举例:str=“ABCDE”,i=2,将str调整为“DEABC”。
要求:时间复杂度为O(n),额外时间复杂度为O(1)。
解题思路:
(1)将str[0,i]部分的字符逆序
A B C D E ——> C B A D E
(2)将str[i+1,N-1]部分的字符逆序
C B A D E ——> C B A E D
(3)将str整体逆序
C B A E D ——> D E A B C
代码:
public class strAdjust {
public static void main(String[] args) {
String str="ABCDE";
int i=2;
str=reverse(str,0,i);
str=reverse(str,i+1,str.length()-1);
str=reverse(str,0,str.length()-1);
System.out.println(str);
}
public static String reverse(String str,int begin,int end){
int len=(((begin+end)%2)==0)?(begin+end)/2:((begin+end)/2+1);
char [] chars=str.toCharArray();
for(int i=begin;i<len;i++){
char temp=chars[i];
chars[i]=chars[end-i+begin];
chars[end-i+begin]=temp;
}
return new String(chars);
}
}
算法第一步,下一篇总结一下排序。