[LeetCode]Reverse Words in a String

来源:互联网 发布:js在线客服插件 编辑:程序博客网 时间:2024/05/16 16:07
参考一些资料,分享一个简洁的代码
思路:
i, j分别指向一个单词的 首尾,从s的结尾开始向前遍历,找到一个单词就取出来放在StringBuilder中。
public class Solution {    public String reverseWords(String s) {        StringBuilder builder = new StringBuilder();        int j = s.length();        for (int i = s.length() -1 ; i >= 0; --i){            if (s.charAt(i) == ' '){                j = i;            }else if ( i == 0 || s.charAt(i-1) == ' '){                if (builder.length() != 0){                    builder.append(' ');                }                builder.append(s.substring(i, j));            }        }        return builder.toString();    }}





-----------第一遍的解题思路--------------
解题思路:
1,把首尾的 space都去掉
2,两个指针start和it分别指向word的开始和结束的下一位;
3,isPreWord用于指示前一个char是字母还是 空格(这是为了过滤两个单词中间有多个space的情况)
4,每发现一个新的完整的单词,就插入到ret的开头,接着插入一个 space
5,因为while循环中我们是以space作为发现单词的标志,而语句的结尾没有space,所以在while结束后,我们还有最后一个单词需要insert进去ret
6,最后str = ret; 

class Solution {public:    void reverseWords(string &s) {        strip(s);        string ret;        auto it = s.begin();        auto start = it;        bool isPreWord = false;        while(it != s.end()){            if (*it == ' '){                if (isPreWord){                    isPreWord = false;                    ret.insert(ret.begin(), start, it);                    ret.insert(0, 1, ' ');                }else{                    it++;                }            }else{                if (!isPreWord){                    isPreWord = true;                    start = it;                }                it ++;            }        }        ret.insert(ret.begin(), start, it);        s = ret;    }    void strip(string &s){        lstrip(s);        rstrip(s);    }    void lstrip(string &s){        auto it = s.begin();        while(it != s.end()){            if (*it == ' '){                it = s.erase(it);            }else{                break;            }        }    }    void rstrip(string &s){        auto rit = s.rbegin();        while(rit != s.rend()){            if (*rit == ' '){                rit = string::reverse_iterator(s.erase((++rit).base()));            }else{                break;            }        }    }}; 


0 0
原创粉丝点击