首页 > 其他分享 >第八天 第四章 字符串 part02 151.翻转字符串里的单词 卡码网:55.右旋转字符串

第八天 第四章 字符串 part02 151.翻转字符串里的单词 卡码网:55.右旋转字符串

时间:2024-06-15 23:28:41浏览次数:14  
标签:151 卡码 string int 反转 单词 字符串 size

151.翻转字符串里的单词 方法很巧妙,进行了两次反转。其中细节太多了。 1.如何处理首个单词前面的空格,以及后面单词之间的空格处理(最重要的部分)。 2.单词反转时的下标。

class Solution {
public:
    void reverse(string &s,int left,int right){
        for(int i=left,j=right;i<j;i++,j--){
        swap(s[i],s[j]);
        }
    }
    string reverseWords(string s) {
    int count=0;
    for(int i=0;i<s.size();i++){
        if(s[i]!=' '){
          if(count!=0)
            s[count++] =' ';
             //后面相邻单词间加上空格
            while(i<s.size()&&s[i]!=' '){
            s[count++]=s[i++];
        }          
        }
    }
    s.resize(count);
    reverse(s,0,s.size()-1);
    int res = 0;
    for(int i=0;i<=s.size();++i){
        if(i == s.size() || s[i] ==' '){
            reverse(s,res,i-1);
            res=i+1;
        }  
    }
    return s;
    }
};

卡码网 55.右旋转字符串

这种方法看起来不太聪明,可以采用反转的方法。先将所有的字符串反转,再将前k个和后k个分别反转就可以得到结果。

string res(s.size(), ' ');创建一个长度为s.size()的字符串,初始化为全空格。这步需要记一下。

#include<iostream>
using namespace std;

int main(){
    string s;
    int a=0;
    cin>>a;
    cin>>s;
    string res(s.size(), ' ');// 创建一个长度为s.size()的字符串,初始化为全空格
    int num=0;
    for(int i=s.size()-a;i<s.size();i++){
     res[num++]=s[i];   
    }
     for(int i=0;i<s.size()-a;i++){
     res[num++]=s[i];   
    }
    cout<<res<<endl;
    
    return 0;
}

标签:151,卡码,string,int,反转,单词,字符串,size
From: https://blog.csdn.net/m0_69189584/article/details/139687707

相关文章