easy 剑指 Offer 翻转单词顺序 栈 双指针

本文介绍了一种使用双指针和栈来实现字符串中单词顺序反转的方法,并提供了C++和Python的实现示例。通过这些方法可以高效地解决字符串处理中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


双指针:

c++

res.pop_back();    // 去掉结尾

class Solution {
public:
    string reverseWords(string s) {
        string res; 
        int r = s.size()-1;
        int l;
        while(r >= 0){
            while(r >= 0 && s[r] == ' '){
                r--;  // 右边界先找到单词末尾
            }
            if(r < 0){
                break;   
            }
            // 右边界指到单词末尾
            for(l = r; l>=0 && s[l] != ' '; l--); // 左边界指到单词前一个空格
            res += (s.substr(l + 1, r - l) + " ");
            r=l ; // 右边界指到新的空格
        }
        if(res.size()){
            res.pop_back();  // 去掉结尾空格
        }

        return res;
    }
};

python


class Solution:
    def reverseWords(self, s: str) -> str:
        res = ""
        r = len(s)-1
        while r >= 0:
            while r >= 0 and s[r] == ' ':
                r -= 1   # 右边界先找到单词末尾 
            if r < 0:
                break

            l = r  #  左右边界都指到单词末尾
            while l>=0 and s[l] != ' ':
                l -= 1
            # 左边界指到单词前一个空格
            res += s[l+1:r+1]
            res += ' '
            r = l # 右边界指到新的空格

        if len(res) > 0:
            res = res[:len(res)-1]   # 去掉结尾空格
        
        return res


栈:

c++


class Solution {
public:
    string reverseWords(string s) {
        // 栈
        stack<string> tmp;
        int n = s.size();
        for (int i = 0; i < s.size(); i++){
            int index = i;
            while(i<n && s[i] != ' '){ // 遇到单词i++
                i++;
            }
            // 没遇到单词 i=index
            if (i != index){
                tmp.push(s.substr(index, i - index));  // 从index开始的i-index个数
            }
        }

        string res;
        while (!tmp.empty()){
            res += tmp.top() + " ";
            tmp.pop();
        }

        return res.substr(0, res.size() - 1);  // 去掉结尾空格
    }
}

python


class Solution:
    def reverseWords(self, s: str) -> str:
        stk = []
        n = len(s)
        i = 0
        while i<n:
            index = i
            while i<n and s[i] != ' ':
                i += 1
            if i != index:  # 指针i碰到单词,i前进了
                stk.append(s[index: i])
            else:
                i += 1

        res = ""
        while stk:
            res += stk[-1] + ' '
            stk.pop()

        return res[:len(res)-1]  # len(res)-1 去掉结尾空格


函数:

python split()


class Solution:
    def reverseWords(self, s: str) -> str:
        return " ".join(s.split()[::-1])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值