首页 > 其他分享 >代码随想录 字符串 test 3

代码随想录 字符串 test 3

时间:2025-01-17 15:33:58浏览次数:3  
标签:遍历 -- newpos 随想录 字符串 oldpos 数组 test 指针

54. 替换数字(第八期模拟笔试)

        为了不使用额外的空间,采用双指针,通过用旧指针遍历原数组计算出数字个数,进而计算出新数组应有的大小,然后新指针指向新数组的最后,此时新,旧指针都位于两数组的末尾,同时从后往前遍历,遇到数组,新指针就需要写入number,遇到字母,就赋值旧数组的值。最终两个指针会同时指向数组起点。在整个过程中,旧指针先移动到旧指针末尾,然后两个指针一起移动到数组起点,时间复杂度为o(2n+kn)。

        为什么采用从后往前写入,因为不采用额外空间,为避免覆盖原数组信息而采用。即从后往前写入不会出现新写入的字符覆盖掉原数组还未遍历到的字符(因为新数组大小已经开辟好了)

        如果采用从前往后遍历,为了不采用额外空间(若采用时间复杂度与从后往前无异),每次遍历到数字都要将它后面的字符移动到5个位置后,时间复杂度为o(n^2)

#include <iostream>
using namespace std;

int main(void){
    string s;
    int count = 0;
    int newpos, oldpos;//设置新单词指针,原单词指针
    
    cin >> s;
    
    for(int i = 0; i < s.size(); i++){
        if(s[i] <= '9' && s[i] >= '0')
            count++;
    }
    
    oldpos = s.size() - 1;
    s.resize(s.size() + count * 5);//更改新数组大小,每个数字要换成number,也就是增加5个
    newpos = s.size() - 1;
    
    while(oldpos >= 0){
        if(s[oldpos] <= '9' && s[oldpos] >= '0'){
            s[newpos--] = 'r';
            s[newpos--] = 'e';
            s[newpos--] = 'b';
            s[newpos--] = 'm';
            s[newpos--] = 'u';
            s[newpos--] = 'n';
        }else{
            s[newpos--] = s[oldpos];
        }
        oldpos--;
    }
    
    cout << s;
    
    return 0;
}

标签:遍历,--,newpos,随想录,字符串,oldpos,数组,test,指针
From: https://blog.csdn.net/m0_73941517/article/details/145205933

相关文章

  • 基于若依框架进行TestNG接口自动化框架搭建(二)
    目录一.前言二.引入TestNg三.创建接口自动化目录结构三.引入okhttp3四.开始编写第一条接口用例一.前言    在上一章节跟着操作把代码成功运行起来,就可以跟着本章节进行接口自动化代码编写,接口自动化使用的测试框架是TestNG,大家跟着我的步骤一步步往下操......
  • 【华为OD-E卷 - 一种字符串压缩表示的解压 100分(python、java、c++、js、c)】
    【华为OD-E卷-一种字符串压缩表示的解压100分(python、java、c++、js、c)】题目有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3ab......
  • pytest测试框架集成钉钉机器人、邮件,并实现持续集成部署
    要结合多系统并存的架构,使用YAML文件编写测试用例,并集成钉钉、邮件通知功能以及CI/CD流程,以下是完整的实现方案。整体功能架构多系统测试支持:使用YAML文件定义测试用例,支持多系统间的模块化、分层管理。测试框架根据YAML文件动态加载测试用例,支持灵活扩展。......
  • post、get请求(查询字符串参数)将对象拼接为地址栏请求参数new URLSearchParams
    constparams=newURLSearchParams({param1:'value1',param2:'value2'}).toString();该方法可将param1和param2拼接为param1=value1&param2=value2实例consturl='https://example.com/api/resource';constparams=newURLSearchP......
  • 写一个方法,将字符串中的单词倒转后输出,如:`my love` -> `ym evol`
    在前端开发中,我们可以使用JavaScript来实现这个功能。以下是一个简单的方法,它接受一个字符串作为参数,然后将字符串中的每个单词倒转后输出:functionreverseWordsInString(str){//将字符串按空格分割成单词数组constwords=str.split('');//使用map函数遍历单词数......
  • JS字符串属性与方法大全
    JS字符串属性与方法大全字符串基本概念示例一:创建字符串常用字符串方法详解查找子串示例二:查找子串提取子串示例三:提取子串替换子串示例四:替换子串字符串分割与连接示例五:分割与连接开发技巧与最佳实践在Web前端开发中,JavaScript的字符串处理能力是开发者工具......
  • 28. 找出字符串中第一个匹配项的下标
    题目KMP典中典,可惜我不会。卡哥思路里的讲解也似懂非懂,跟着卡哥代码敲了一遍classSolution{public:voidgetNext(int*next,conststring&s){intj=-1;next[0]=j;for(inti=1;i<s.size();++i){whi......
  • 代码随想录算法训练营第8天 | 344.反转字符串,541. 反转字符串II,替换数字
    一、刷题部分1.1题目名称原文链接:代码随想录题目链接:344.反转字符串-力扣(LeetCode)1.1.1题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节
    9-24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1] 提......
  • 代码随想录:二叉搜索树的最小绝对值
    遍历二叉搜索树,定义一个全局的上一个节点确实好用/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):......