首页 > 编程语言 >代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字

代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字

时间:2024-08-09 15:06:06浏览次数:9  
标签:reverse string int 反转 随想录 pos 字符串 size

344.反转字符串

题目链接:https://leetcode.cn/problems/reverse-string/description/

我的代码:

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

使用swap库函数:

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

题目链接:https://leetcode.cn/problems/reverse-string-ii/description/

使用reverse库函数:

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

i += 2 * k实现按段反转字符串。

自己实现reverse库函数:

class Solution {
public:
    string reverse(string& s, int start, int end) { // 注意这里是string& s,需要直接修改s,而不是返回一个新的字符串
        for (int i = start, j = end; i < j; i++, j--) {
            swap(s[i], s[j]);
        }
        return s;
    }
    string reverseStr(string s, int k) {
        for (int i = 0; i < s.size(); i += 2 * k) {
            if (i + k <= s.size()) {
                reverse(s, i, i + k - 1);
            } else {
                reverse(s, i, s.size() - 1);
            }
        }
        return s;
    }
};

自己实现reverse函数要注意直接修改引用s的值。

另一种思路:

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

注意边界条件。

卡码网:54.替换数字

题目链接:https://kamacoder.com/problempage.php?pid=1064

我的代码:

#include <iostream>
using namespace std;
int main()
{
    string s;
    cin >> s;
    int count = 0;
    int sOldsize = s.size() - 1;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
            count++;
    }
    s.resize(s.size() + count * 5);
    int sNewsize = s.size() - 1;
    while (sNewsize >= 0)
    {
        if (s[sOldsize] >= '0' && s[sOldsize] <= '9')
        {
            s[sNewsize--] = 'r';
            s[sNewsize--] = 'e';
            s[sNewsize--] = 'b';
            s[sNewsize--] = 'm';
            s[sNewsize--] = 'u';
            s[sNewsize--] = 'n';
        }
        else
        {
            s[sNewsize--] = s[sOldsize];
        }
        sOldsize--;
    }
    cout << s << endl;
    return 0;
}

先统计字符串中数字个数,然后扩充数组容量,从后向前添加字符。

标签:reverse,string,int,反转,随想录,pos,字符串,size
From: https://www.cnblogs.com/kurumaruq/p/18349805

相关文章

  • 代码随想录day24 || 93 复原IP地址,78 子集, 90 子集2
    93复原ip地址funcrestoreIpAddresses(sstring)[]string{ //字符串分割问题,考虑回溯算法 varpath,res[]string iflen(s)<4{ returnres } backtracking(s,&path,&res) returnres}funcbacktracking(sstring,path*[]string,res*[]string){ ifle......
  • 代码随想录Day9
    KMP算法主要用来进行字符串匹配KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。所以如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。next数组就是一个前缀表(prefixtable)。前缀表有什么作......
  • 数组,字符串反转
    this.message='HelloVue.js!'this.message.split('').reverse().join('')执行后:分析:1.split('')把一个字符串分割成字符串数组如何理解?==》就是:例如字符串是“Hello”,使用split('')之后,就变成['H','e','l','......
  • 「代码随想录算法训练营」第三十三天 | 动态规划 part6
    322.零钱兑换题目链接:https://leetcode.cn/problems/coin-change/文章讲解:https://programmercarl.com/0322.零钱兑换.html题目难度:中等视频讲解:https://www.bilibili.com/video/BV14K411R7yv/题目状态:略微有点思路,但还是有点转不过来。思路:这次是找最小的钱币组合,因此......
  • 使用两个连接的字符串调用变量 Python
    抱歉缺乏细节,因为我是python的初学者:c1=c2=c3=c4=c5=Falsex=int(input("Enteranumber1-5:"))ifx>5orx<1:print("Yournumbermustbebetween1and5")else:"c",x=True第8行是连接2个字符串的地方。我不确定......
  • 利用StringBuffer把字符串反转
    packagecom.shujia.day11;importjava.util.Scanner;/*把字符串反转*/publicclassStringBufferDemo6{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println("请输入一个要反转的字符串:");......
  • 代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形
    代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形LeetCode(42)接雨水题目代码importjava.util.Stack;classSolution{publicinttrap(int[]height){//用单调栈进行操作intsum=0;Stack<Integ......
  • 字符串part01
    今天学了字符产的第一部分:反转字符串,使用双指针。反转字符串Ⅱ,需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。数组填充问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。1.反转字符串题目:编写一个函数,其作用是将输入......
  • StringBuffer的功能,添加、删除、替换、反转(字符串逆序)功能 day11
    packagecom.shujia.day11;/*StringBuffer的功能:添加功能publicStringBufferappend(Stringstr)在末尾处添加字符,返回自身publicStringBufferinsert(intoffset,Stringstr)指定位置添加字符串,返回自身......
  • StringBuffer:可变字符串及构造方法 day11
    packagecom.shujia.day11;/*StringBuffer:可变字符串,这个容器中只能存放字符概述:线程安全,可变的字符序列。字符串缓冲区就像一个String,但可以修改。在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容......