代码随想录算法训练营day9-字符串part2

反转单词

原题链接:反转单词

思路:1.使用双指针,从后往前获取所有单词,依次添加到新变量string后

        2.先去除前后空格,中间剩一个空格,整体反转,而后使用双指针,将每个单词反转一次。

class Solution {
public:
    string removeSpace(string s){
        //在移除所有空格前提下,在每个单词中间中间加上一个空格

        int last =0;
        int fast =0;
        while(fast<s.size()){
            if(s[fast] != ' '){
                s[last] = s[fast];
                last++;
            }else if(last>0 && s[last-1] !=' '){
                s[last] = s[fast];
                last++;
            }
            fast++;
        }
        if(s[last-1] ==' ')
            last--;
        s.resize(last);
        return s;
    }

    string reverseWords(string s) {
        //去除空格
        s = removeSpace(s);
        reverse(s.begin(),s.end());

        int last=0;
        int fast = 0;
        while(fast<=s.size()){
            if(fast!=s.size() && s[fast]!=' ' ) {
                fast++;
                continue;
            }
            reverse(s.begin()+last,s.begin()+fast);
            last=fast+1;
            fast++;
        }
        
        return s;
    }
};

右旋字符串

原题链接:右旋字符串

思路:截取后k个字符,定义新字符串,并将原字符串拼接,重新设置其大小。

#include<iostream>

using namespace std;

int main(void){
    string s;
    int n;
    cin>>n>>s;
    
    int size = s.size();
    string t = s.substr(size-n,size - 1);
    
    string rs = t + s;
    rs.resize(size);
    cout<<rs;
    
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值