漫漫编程路,手撕代码最重要
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"
本题思路:首先将整个字符串进行翻转,如"I am a student."——>".tneduts a ma I",之后在对每个单词进行翻转,由".tneduts a ma I",——>"student. a am I"
难点:本题但从思路来说似乎很简单,但楼主初入编程,手撕这道题便开始碰壁。总结如下-这题思路如上,初学者的难点主要是边界条件的确定
public class Test2 {
/**
* 这个方法是本题的核心,是用来翻转字符串的方法,这题的核心,
* 就是不断确定边界条件,然后调用这个方法
* @param array
* @param start
* @param end
*/
public static void Reverse(char[] array, int start, int end)
{
if (array == null || start < 0 || end > array.length - 1)
{
return;
}
while (start < end)
{
char temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
}
public static String ReverseSentense(String sentense)
{
if (sentense==null)
{
return null;
}
char[] array = sentense.toCharArray();
int start = 0;
int end = array.length - 1;
// Step1.先翻转整个句子
Reverse(array, start, end);
// Step2.再翻转句中的每个单词
start = end = 0;
while (start < array.length)
{
if (array[start] == ' ')
{
start++;
end++;
}
else if (end == array.length || array[end] == ' ')
{
Reverse(array, start, --end);
start = end + 1;
end++;
}
else
{
end++;
}
}
return new String(array);
}
}