持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
一、题目描述:
557. 反转字符串中的单词 III - 力扣(LeetCode)
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
- 1 <= s.length <= 5 * 10^4
- s 包含可打印的 ASCII 字符。
- s 不包含任何开头或结尾空格。
- s 里 至少 有一个词。
- s 中的所有单词都用一个空格隔开。
二、思路分析:
从前遍历,找到空格,这样就找到一个单词了,开辟一个数组,将单词其逆序放到新数组中,使用一个记录变量,记录该单词占位多少,以便找到下次新数组存放开始位置。最后一个单词后面没有空格,所以要单独拿出来进行操作
可以不必要将字符串转换为数组,本人是不太熟悉字符串一些操作,所以这样写。
三、AC 代码:
class Solution {
public String reverseWords(String s) {
char[] array = s.toCharArray();//将字符串转换为字符数组,以便找下标操作
char[] answer = new char[array.length];//开辟一个新数组存放逆序单词
int i=0,j=0;
int temp=0;//记录下一次往新数组存放的开始位置
while(j<array.length){
if(array[j]==' '){//找到空格,对单词进行操作
for(int k=j-1;k>=temp;k--){//逆序存放
answer[i++] = array[k];
}
answer[i] = ' ';//单词后面补充空格
i++;
temp = j+1;//下一次往新数组存放的开始位置
}
j++;
}
for(int k=j-1;k>=temp;k--){//最后一个单词后面没有空格,单独拿出来进行操作
answer[i++] = array[k];
}
String result = String.valueOf(answer);//将字符数组转换成字符串
return result;
}
}