【LeetCode】344、反转字符串

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

 题目如上所示,主流解题方法有三种:
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()函数 - 我的小叮当 - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值