算法

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();
    }
}

复杂度分析:

遇到的问题

小编曾将int start=i放到while外,因为小编天真地认为start值时刻都=i,想了很久……后面才意识到问题所在。
基本类型是赋值操作,所以start=i是每循环一次才重新赋值。
而小编之所以有之前的想法是因为用多了对象,对象是引用关系,当对象实例化之后就一直指向某个内存空间(内存中的值),所以会跟随内存中该值的变化而变化。却没发现这是基本类型。

上一篇下一篇

猜你喜欢

热点阅读