- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
题目描述
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
提示:
在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
解题
刚开始想用数组挺蠢的,看结尾的第一次提交,通过用了很长时间
1.使用双指针之间的数组来确定需要转换的数组.然后进行翻转
流程:1.刚开始两个指针都从头部开始,右指针探路,当遇到空格时触发
2.触发翻转时,右指针需要向前一位,去掉空格
3.翻转完成,左指针移动到右指针的后一位,直接跳过当前空格.右指针继续探路
4.当右指针到达数组尾部,直接再次进行翻转,然后直接退出循环
public static String reverseWords(String s) {
// 需要定位空格,然后将指针之间的单词作为数组进行交换
char[] chars = s.toCharArray();
int left = 0;
int right = 0;
int length = chars.length -1;
char temp = 0;
while (left <= right) {
// 当大于长度,转换剩下的数组
if (right > length) {
reverse2(chars,left,right -1,temp);
break;
}
char aChar = chars[right];
// 右指针碰到空格,开始操作
if (' '==chars[right]) {
// 翻转
reverse2(chars,left,right -1,temp);
left = right + 1;
}
right ++;
}
return String.valueOf(chars);
}
public static void reverse2(char[] charss,int left,int right,char temp) {
while (left < right) {
temp = charss[left];
charss[left] = charss[right];
charss[right] = temp;
left ++;
right --;
}
}