tomoebzk

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Leetcode 151 反转字符串中的单词

该题第二次刷到,第一次完全没想到思路,无从下手,第二次碰到就能想到了,先反转整个字符串,再处理多余空格(包括反转后位于字符串首的空格),再遍历每个单词进行反转,中间需要注意的细节较多,需要仔细考虑

string reverse(string s,int start,int end)
    {
        for(int i=start,j=end;i<j;i++,j--)
        {
            swap(s[i],s[j]);
        }
        return s;
    }
    string myReverse(string s)
    {
//去除多余空格,查找空格并删除
        int slow=0,fast=0;
        while(fast<s.size()&&s[fast]==' ')
        {
            fast++;
        }
        while(fast<s.size())
        {
            if(fast-1>=0&&s[fast]==' '&&s[fast-1]==' ')
            {
                fast++;
                continue;
            }
           else
           {
                s[slow++]=s[fast];
                fast++;
           }
        }
        if(s[slow-1]==' ')
        {
            s.resize(slow-1);
        }
        else
            s.resize(slow);
        return s;
    }
    string reverseWords(string s) {
        
        string ans=myReverse(s);
        int slow=0,fast=ans.size()-1;
        for(;slow<fast;slow++,fast--)
        {
            swap(ans[slow],ans[fast]);
        }

        slow=0;
        fast=0;
        for(;fast<=ans.size();fast++)
        {
            if(ans[fast]==' '||fast==ans.size())
            {
                ans=reverse(ans,slow,fast-1);
                slow=fast+1;
                
            }
            else 
                continue;
        }
        return ans;

    }

Kamacoder 55 右旋字符串

本题可以作为leetcode 151的简化版本,同样的思路,但是不需要考虑空格的影响,同样先反转整个字符串,再反转前k个字母

#include<iostream>
#include<string>
#include<algorithm>
int main()
{
    int k;
    std::string  s;
    std::cin>>k;
    std::cin>>s;


    std::reverse(s.begin(),s.end());
    std::reverse(s.begin(),s.begin()+k);
    std::reverse(s.begin()+k,s.end());
    std::cout<<s<<std::endl;

}
posted on 2026-01-27 11:28  broderk  阅读(0)  评论(0)    收藏  举报