当前位置: 首页 > news >正文

代码随想录算法训练营第八天 |【字符串】344.反转字符串、541. 反转字符串II、卡码网:54.替换数字

代码随想录算法训练营第八天 |【字符串】344.反转字符串、541. 反转字符串II、卡码网:54.替换数字

344.反转字符串

思路
  • 双指针,交换完成后双指针都往中间移动,如果相遇则停止(反转链表上用过)
  • 可以用 swap 库函数
看完代码随想录之后的想法
class Solution {
public:void reverseString(vector<char>& s) {for (int i = 0, j = s.size() - 1; i <= j; i++, j--) {swap(s[i], s[j]);}}
};

541. 反转字符串II

思路
  • 跟上一题一样哇,用双指针法,关键是计数前2k字符的前k字符,可能要整计数器
看完代码随想录之后的想法
模拟题,注意字符计数
  • 可以用库函数reverse(vector.begin(), vector.end())
  • for 循环每次加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用法,传入的是指针reverse(s.begin() + i, s.begin() + i + k);continue;} else {reverse(s.begin() + i, s.end());}}return s;}
};

卡码网:54.替换数字

思路
  • 一个一个遍历,然后插入新字符串,push_back
看完代码随想录之后的想法
不用辅助空间的做法
  • 首先对数组大小进行扩充,有几个数字就加几个5, vector.resize()

  • 从后向前填充,因为从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素整体向后移动。

    #include <iostream>
    using namespace std;
    int main () {// vector<char> s不能像使用 std::string 那样直接使用 std::cin 进行输入string s;while (cin >> s) {int left = s.size() - 1;int count = 0;for (int i = 0; i < s.size(); i++) {if (s[i] >= '0' && s[i] <= '9') {count++;}}s.resize(s.size() + 5 * count);int right = s.size() - 1;while (left >= 0) {if (s[left] >= '0' && s[left] <= '9') {s[right--] = 'r';s[right--] = 'e';s[right--] = 'b';s[right--] = 'm';s[right--] = 'u';s[right--] = 'n';left--;} else {s[right--] = s[left--];}}cout << s << endl;}}
    
  • 其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

    这么做有两个好处:

    1. 不用申请新数组。
    2. 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。

遇到困难

  • 一些字符串操作的库函数,需要总结

今日收获

  • 今日打卡终于赶上了进度,加油

相关文章:

  • 互联网与无线广播:数字时代与模拟时代的通讯双轨制-优雅草卓伊凡
  • 使用synchronized关键字同步Java线程
  • Vector - VT System - 板卡_VT板卡使用介绍_07
  • BUUCTF Pwn wustctf2020_closed WP
  • Java大师成长计划之第12天:性能调优与GC原理
  • 设计模式每日硬核训练 Day 17:中介者模式(Mediator Pattern)完整讲解与实战应用
  • LeetCode - 91.解码方法
  • 高等数学第三章---微分中值定理与导数的应用(3.3泰勒(Taylor)公式)
  • transfomer网络构建
  • C与指针——输入输出
  • 【学习笔记】深度学习:典型应用
  • LlamaIndex统一管理存储组件的容器--StorageContext
  • ES类的索引轮换
  • 轻量化定时工具!Pt 极简界面 :定时备份 + 循环灵活关机
  • 深度优先搜索(DFS)与广度优先搜索(BFS):图与树遍历的两大利器
  • 分布式系统中的 ActiveMQ:异步解耦与流量削峰(二)
  • vue-chat 开源即时聊天系统web本地运行方法
  • 《CUDA:解构GPU计算的暴力美学与工程哲学》
  • 文章记单词 | 第62篇(六级)
  • 25考频高的前端面试题
  • 黎巴嫩9年来首次举行地方选举
  • 首日5金!中国队夺得跳水世界杯总决赛混合团体冠军
  • 履新宿州市政府党组书记后,任东暗访五一假期安全生产工作
  • 阿根廷发生5.6级地震,震源深度30公里
  • 见证历史与未来共舞:上海西岸“蝶变共生”对话讲坛圆满举行
  • 旭辉控股集团:去年收入477.89亿元,长远计划逐步向轻资产业务模式转型