leetcode刷题41——反转字符串系列

这篇博客探讨了两种字符串操作:一是原地反转整个字符串,二是仅反转字符串中的元音字母。这两种操作都使用了双指针技巧,有效地在O(1)额外空间复杂度下完成任务。对于反转字符串,从两端向中间遍历并交换对应位置的字符;对于反转元音字母,两个指针分别从字符串首尾开始,当遇到非元音字母时跳过,遇到元音字母则交换位置,直至两指针相遇。

1.反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
考察知识点:双指针

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

2.反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
考察知识点:双指针

class Solution {
public:
    string reverseVowels(string s) {
        int l=0,r=s.size()-1;
        while(l<r)
        {
            if(tolower(s[l])!='a'&&tolower(s[l])!='e'&&tolower(s[l])!='i'&&tolower(s[l])!='o'&&tolower(s[l])!='u')
            {
                ++l;
                continue;
            }
            if(tolower(s[r])!='a'&&tolower(s[r])!='e'&&tolower(s[r])!='i'&&tolower(s[r])!='o'&&tolower(s[r])!='u')
            {
                --r;
                continue;
            }
            swap(s[l],s[r]);
            ++l;--r;
        }
        return s;
    }
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

给算法爸爸上香

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

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

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

打赏作者

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

抵扣说明:

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

余额充值