tomoebzk

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Leetcode 344 反转字符串

采用对向双指针left=0,right=s.size()-1,

 void reverseString(vector<char>& s) {
        int left=0;
        int right=s.size()-1;
        while(left<right)
        {
            char temp=s[left];
            s[left]=s[right];
            s[right]=temp;
            right--;
            left++;
        }
    }

Leetcode 541 反转字符串Ⅱ

将题目看作一个2k的窗口,窗口每次滑动2k,对于不足2k的情况中的第二个,操作和正常移动一样,因此只需在每次移动后比较fast+k与s.size()的大小即可

string reverseStr(string s, int k) {
        for(int fast=0;fast<s.size();fast+=2*k)
        {
            if(fast+k<s.size())
            {
                int left=fast;
                int right=fast+k-1;
                while(left<right)
                {
                    char temp=s[left];
                    s[left]=s[right];
                    s[right]=temp;
                    left++;
                    right--;
                }
            }
            if(fast+k>=s.size())
            {
                int left=fast;
                int right=s.size()-1;
                while(left<right)
                {
                    char temp=s[left];
                    s[left]=s[right];
                    s[right]=temp;
                    left++;
                    right--;
                }
            }
        }
        return s;
    }

Kamacoder 54.替换数字

之前好像看到过类似的题目?扩充字符串以后用right维护新字符串,oldRight遍历旧字符串

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    std::string s;
    int numCount=0;
    std::cin>>s;
    int i=0;
    for(i=0;i<s.size();i++)
    {
        if(s[i]>='0'&&s[i]<='9')
        {
            numCount++;
        }
    }
    int oldRight=s.size()-1;
    s.resize(s.size()-numCount+numCount*6);
    int right=s.size()-1;
    for(;oldRight>=0;oldRight--)
    {
        if(s[oldRight]>='0'&&s[oldRight]<='9')
        {
            s[right--]='r';
            s[right--]='e';
            s[right--]='b';
            s[right--]='m';
            s[right--]='u';
            s[right--]='n';
        }
        else
        {
            s[right]=s[oldRight];
            right--;
        }          
    }
    std::cout<<s<<std::endl;
}
posted on 2026-01-22 15:08  broderk  阅读(4)  评论(0)    收藏  举报