LeetCode-转换字符串

文章目录

题目要求

  • 写一个函数进行string字符串逆转。
    要求不允许分配另一个额外的字符串数组,只允许在输入字符串数组上,就地进行修改(空间复杂度O(1))。也就是说,只允许额外创建一个临时变量。

Example 1:
Input: [“h”,“e”,“l”,“l”,“o”]
Output: [“o”,“l”,“l”,“e”,“h”]

思路:我们都知道交换两个元素的方法,就是创建一个临时变量存储,然后交换即可。string字符串数组转换无非就是好几组两两交换的实现。
举个栗子
在这里插入图片描述

图1 string转置示意图

代码

我们可以借助迭代器,进行实现,然后创建一个变量char存储中间变量。
由于两两交换,所以需要交换的次数就是n / 2 ,其中n为字符串长度,考虑了奇偶的情况。
两个迭代器,一个从头自增,一个从尾部自减,使用这两个获取图1 的元素交换,例如:首先,交换h和o;则*begin交换*end元素,如图2所示
在这里插入图片描述

图2 第一次交换示意图
void reverseString(vector<char>& s) {
    vector<char>::iterator begin,end;
    int size = s.size();
    int middle;
    //加入判断条件,为0时直接返回
    if(size == 0 || size ==1)
        return;
    middle = size / 2;
    begin = s.begin();
    end = s.end()-1;
    for(int i = 0; i < middle ; ++i)
    {
        char temp;
        temp = *begin;
        *begin = *end;
        *end = temp;
        begin++;
        end--;
    }

需要注意这里注意end()返回的是尾后迭代器,其不指向任何元素,初始化需要减一指向最后一个元素,如o;而begin初始则指向h;
这样就大功告成了,总结:需要多分类讨论极端情况,如字符串长度为0或1直接返回即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值