考察点
字符串遍历
知识点
题目
分析
类似这种题目只能观察元素特点找出规律确定算法了,像第一道题目翻转单词顺序,我们可以很容易的得到翻转每个字符后的的字符串,再仔细观察一下紧接着以空格为间隔分别翻转俩边的字符串就可以解这道题目了
第二题要求左旋字符串,同样首先翻转整个字符序列,然后以位数为间隔分别翻转俩边的字符序列即可解这道题目
public class FortyTwo {
public static void main(String[] args) {
String str = "i am student.";
//reverse(str.toCharArray());
String strA = "abcdefg";
leftRotateString(strA.toCharArray(),2);
}
public static void leftRotateString(char[] str,int n) {
if(str == null || str.length <= n) {
return;
}
int firstStart = 0;
int firstEnd = str.length - n - 1;
int secondStart = firstEnd + 1;
int secondEnd = str.length - 1;
reverseCore(str,firstStart,secondEnd);
reverseCore(str,firstStart,firstEnd);
reverseCore(str,secondStart,secondEnd);
System.out.println(new String(str));
}
public static void reverse(char[] str) {
int start = 0;
int end = str.length - 1;
reverseCore(str,start,end);
start = 0;
end = 0;
while(end < str.length) {
if(str[end] == ' ') {
reverseCore(str,start,end-1);
end++;
start = end;
} else {
end++;
}
}
System.out.println(new String(str));
}
public static void reverseCore(char[] str,int start,int end) {
while(start < end) {
char tmp = str[end];
str[end] = str[start];
str[start] = tmp;
start++;
end--;
}
}
}