【LeetCode】344、反转字符串

本文介绍了三种不同的C++方法来反转字符串,包括使用双指针交换、栈进行反转以及直接调用STL的reverse函数。详细分析了每种方法的实现原理,特别是reverse函数的底层实现涉及的swap操作。通过实例展示了如何在三分钟内完成笔试题目。

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

我们同学去深信服笔试时,考了这个算法代码,所给的要求是三分钟之内写出这个程序

 题目如上所示,主流解题方法有三种:
1.这种方法应该算是普普通通的那种,左下标left++,右下标right--,然后循环中使用swap交换函数来进行换位。

class Solution {
public:
    void reverseString(vector<char>& s) {
        int n = s.size();
        for (int left = 0, right = n - 1; left < right; ++left, --right) 
        {
            swap(s[left], s[right]);
        }
    }
};

2.题中所说反转,我第一反应就是使用栈来进行反转(因为栈的特点就是先进后出),这样就完成了题中所说的反转效果。

class Solution {
public:
    void reverseString(vector<char>& s) {
        stack<char>istack;
        for (int i = 0; i < s.size(); i++) 
        {
            istack.push(s[i]);
        }
        for (int i = 0; i < s.size(); i++) 
        {//这里不能使用栈的长度
            s[i] = istack.top();//获取栈顶元素之后出栈
            istack.pop();
        }
    }
};

3.第三种方法的话,我觉得这个代码太聪明了,一行就解决了这个问题

class Solution {
public:
    void reverseString(vector<char>& s) {
         reverse(s.begin(),s.end());
    }
};

关于reverse函数的stl剖析我没看,但是按照下面那篇文章所示的话,底层就是swap函数的调用

关于第三种解法中所使用到的函数reverse,具体使用以及参考取自这块:

【STL】reverse()函数 - 我的小叮当 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值