从0开始到华五复试 字符串

344. 反转字符串 - 力扣(LeetCode)

字符串本质就是数组,采用双指针的方法,一个在前一个在后即可,不断交换。

而还有一个点是,字符串有奇数偶数的情况,我们可以用一个i<s.size()/2,这样奇数最后中间的就遍历不到,而偶数自然就能全部交换

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]);
        }
    }
};

541. 反转字符串 II - 力扣(LeetCode)

思路:问题是在于处理每经过2k要反转前k个字符,若是利用for循环中i+=2*k,即可遍历每次起点,再利用reverse即可。而<2k其实不用判断,因为只要剩余的大于k,那么就翻转前k个即可,若小于k则直接翻转(比如剩余k+1个话,直接就翻转前k个,然后最后一个不用管了,直接return即可,最后一个不算是少于k个的,因为其在遍历的2k个元素内)

class Solution {
public:
    string reverseStr(string s, int k) {
        for(int i=0;i<s.size();i+=2*k){
            if(i+k<s.size()){
                reverse(s.begin()+i,s.begin()+i+k);
            }
            else{
                reverse(s.begin()+i,s.end());
            }
        }
        return s;
    }
};

马上就出考研成绩了,希望能进复试吧!!许愿一下,然后继续坚持刷题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值