557.反转字符串中的单词(双指针) 0.4.2

算法入门第四天第二题 0.4.2

在这里插入图片描述

在这里插入图片描述

557.反转字符串中的单词III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

我的解法:

class Solution {
public:
    string reverseWords(string s) {
        int i=0,j=0;
        
        while(j<=s.length()){
            
            if(s[j]==' '||s[j]=='\0'){
                reverse(s,i,j);
                i=j+1;     
            }
           
            ++j;
        }

        return s;
    }
private:
    void reverse(string& s,int i,int j){
        int n=j-1;
       
        while(i<n){
            swap(s[i],s[n]);
            ++i;
            --n;
        }

    }
};

遇到的问题:

一开始没有注意到最后一个单词的问题,reverse条件设置为了if(s[j]= = ’ ‘),测试的时候发现最后一个单词没有反转。仔细思考,并且去查询了string类型的末尾是什么情况。所以当i指针停留在最后一个字符串的开始位置,j不断向后移动时,如果遇到末尾‘\0’,说明此时[i,j-1]位置是最后一个需要反转的字符串,这种情况可以单独讨论,给if语句加上s[j]==’\0’的条件。

附上查阅的资料:(本人转载仅供学习使用)

std::string:标准中未规定需要\0作为字符串结尾。编译器在实现时既可以在结尾加\0,也可以不加。(因编译器不同)

但是,当通过c_str()或data()(二者在 C++11 及以后是等价的)来把std::string转换为const char *时,会发现最后一个字符是\0。但是C++11,string字符串都是以’\0’结尾。

st char *时,会发现最后一个字符是\0。但是C++11,string字符串都是以’\0’结尾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值