151. 颠倒字符串中的单词

✔做题思路 or 感想 :

  1. 乍一看很猛,其实思路就仨

    1. 把整个字符串反转
    2. 删除多余空格
    3. 然后再把每一个单词反转
  2. 反转,删除空格用的都是双指针法,太香了

  3. 数组中的删除操作总体思想虽然是把符合条件的数往前面推,但这个"推"并不是交换值!而是直接往前面把不符合条件的值直接替换了!!!

    class Solution {
    public:
        string reverseWords(string s) {
            reverse(s.begin(), s.end());
            int fast = 0, slow = 0;
            while (s[fast] == ' ' && fast < s.size()) {	//这里是先要删除前面的空格
                fast++;
            }
            for (; fast < s.size(); fast++) {	//去除中间空格
                if (fast > 1 && s[fast - 1] == s[fast] && s[fast] == ' ')continue;
                else {	//注意这里的删除操作,不是用swap替换!而是直接就把后面符合条件的直接替换前面不符合条件的数!!!!
                    s[slow] = s[fast];
                    slow++;
                }
            }
            //下面是为了处理后面末尾的空格
            if (slow > 0 && s[slow - 1] == ' ')s.resize(slow - 1);
            else s.resize(slow);
    		//下面是对每一个单词的反转
            fast = 0, slow = 0;
            for (; fast < s.size(); fast++) {
                if (fast == s.size() - 1) {
                    reverse(s.begin() + slow, s.end());
                }
                else if (s[fast + 1] == ' ') {
                    reverse(s.begin() + slow, s.begin() + fast + 1);
                    slow = fast + 2;	//slow找下一个单词的起点
                    fast++;
                }
            }
            return s;
        }
    };
    
posted @   北原春希  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示