【LeetCode-简单】557. 反转字符串中的单词 III - 双指针

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

要注意对最后一个单词的处理,最后一个单词的后面没有空格

class Solution {
public:
    string reverseWords(string s) {
        int len=s.size();
        int left=0,right=1;
        while(right<len){
            if(s[right]==' '){
                int low=left,high=right-1;
                while(low<high){
                    swap(s[low],s[high]);
                    low++;
                    high--;
                }
                left=++right;
            }else{
                right++;
            }
        }
        right--;
        while(left<right){
            swap(s[left],s[right]);
            left++;
            right--;
        }
        return s;
    }
};

上面的方法是在原数组上进行操作,也可以开辟一个新字符串。方法类似。

class Solution {
public:
    string reverseWords(string s) {
        int len=s.size();
        string ans;
        int i=0;
        while(i<len){
            int start=i;
            while(i<len && s[i]!=' '){
                i++;
            }
            int end=i-1;
            while(start<=end){
                ans.push_back(s[end]);
                end--;
            }
            while(i<len && s[i]==' '){
                i++;
                ans.push_back(' ');
            }
        }
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值