【贪玩巴斯】每日一练——《力扣:LeetCode 算法入门》(C++):字符串——「反转字符串——双指针」 2021-11-28

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhbqj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目:

题目一:反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:
输入:s = [“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]

示例 2:
输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]

提示:
1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

相关标签
递归
双指针
字符串

C++源程序:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int length = s.size();
        int i = 0; // 头指针
        int e = length - 1; // 尾指针
        while(i < e){  // 这里我犯了一个错误,原来写的是( i < length - 1 ) 结果算法是有错误的。
            int temp = 0; // temp  n.临时员工
            temp = s[i];
            s[i] = s[e];
            s[e] = temp;
            ++i;
            --e;
        }
    }
};

个人心得:

本题很明显是使用双指针的解题办法。
先设置好头、尾指针,因为涉及反转,所以很自然想到首尾的位置交换,其次我们还需要一个中间变量temp来存储交换变量,这样才能实质性的交换值。
关键点在于while(i < e)的 I < e。
为什么是这样呢?因为单数双数的字符串中元素个数都可以在这样的条件下成立——双数时候,刚好最中间两个数交换完,条件不成立退出while循环;单数的时候,刚好最中间的单独的那个数不用交换,并且条件不成立退出while循环。

涉及知识:

  1. s.size();
    s.size(); //返回s当前包含的元素(值)的个数,即s的长度
  2. ++I I++
    加号在前的,先加一之后——再用加一之后的i进行运算。
    加号在最后的,先赋值进行运算,最后单独给i进行加一。
  3. temp中间变量
    在交换值的情况中,经常使用中间变量,可以设为temp;
    规律是先用需要改变的值,赋给temp,再把两个交换的值进行赋值,最后把temp赋给第二次进行交换赋值的那个值。
    temp = s[i];
    s[i] = s[e];
    s[e] = temp;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪玩巴斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值