LeetCode题解:反转字符串中的单词
2022-03-07 本文已影响0人
搬码人
题目描述
给定一个字符串s,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例
输入:s = "God Ding"
输出:"doG gniD"
方法思路
开辟一个新字符串。然后从头到尾遍历原字符串,直到找到空格为止,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。如此循环多次,直到遍历完原字符串,就能得到翻转后的结果。
注意:是每个单词内部反转,不是整体反转,所以当反转完一个单词后需拼接上空格。
class Solution {
public String reverseWords(String s) {
StringBuffer ret = new StringBuffer();
int length = s.length();
int i=0;
while(i<length){
int start = i;
while(i<length&&s.charAt(i)!=' '){
i++;
}
for(int j=start;j<i;j++){
ret.append(s.charAt(start+i-1-j));
}
while(i<length&&s.charAt(i)==' '){
ret.append(' ');
i++;
}
}
return ret.toString();
}
}
复杂度分析:
- 时间复杂度:O(N)。原字符串中的每个字符都会在O(1)的时间内放入新字符串中。
- 空间复杂度:O(N)。我们开辟了与原字符串等大的空间。
遇到的问题
小编曾将int start=i放到while外,因为小编天真地认为start值时刻都=i,想了很久……后面才意识到问题所在。
基本类型是赋值操作,所以start=i是每循环一次才重新赋值。
而小编之所以有之前的想法是因为用多了对象,对象是引用关系,当对象实例化之后就一直指向某个内存空间(内存中的值),所以会跟随内存中该值的变化而变化。却没发现这是基本类型。