美文网首页
字符串反转

字符串反转

作者: krislyy_ | 来源:发表于2018-12-11 15:40 被阅读0次

给定一个字符串,逐个翻转字符串中的每个单词。

示例:

输入: "the sky is blue",
输出: "blue is sky the".

说明:

无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶: 请选用C语言的用户尝试使用 O(1) 空间复杂度的原地解法。

    //1.翻转
    //2.按单词反转
    void reverseWords(string &s) {
        //强行头部加空格方便统一处理
        s.insert(0, 1, ' ');
        reverse(s.begin(), s.end());
        int len = s.size();
        //搜索的位置
        int search = 0;
        //搜索的当前单词的长度
        int cnt_word = 0;
        //搜索的当前单词的起始位置
        int start_word = 0;
        while( search < len ){
            //在单词有效范围内
            if(s[search] != ' ') ++search, ++cnt_word;
            //在单词边界
            else{
                if(cnt_word != 0){
                    //翻转单词
                    reverse(s.begin() + start_word, s.begin() + start_word + cnt_word);
                    //去除多余的空格
                    search++;
                    while(search < len && s[search] == ' ') s.erase(s.begin() + search);
                    //设置下一个单词搜索的初始位置和长度
                    start_word = search;
                    cnt_word = 0;
                }
                //可以去除原字符串中开头和尾巴可能存在的连续空格
                else s.erase(s.begin() + start_word);
            }
        }
        //去除空格最后一个单词附带的空格
        s.pop_back();
    }

相关文章

网友评论

      本文标题:字符串反转

      本文链接:https://www.haomeiwen.com/subject/eycehqtx.html