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

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

时间:2024-10-09 12:32:38浏览次数:10  
标签:int 反转 随想录 https 字符串 com size

344.反转字符串

反转字符串比较简单,除了用reverse,可以用for循环,两头向中间夹,进行swap

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

541. 反转字符串II

文章链接:https://programmercarl.com/0541.反转字符串II.html#思路
题目链接:https://i.cnblogs.com/posts/edit
视频链接:https://www.bilibili.com/video/BV1dT411j7NN

思路:其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。
总结:一开始这里我写的很麻烦,统计前2k的个数,还统计2nk之后的个数,然后每一种情况分别进行了代码逻辑的书写

class Solution {
public:
    //子串翻转
    void reverse(int start,int end,string &s){
        for(int i=start,j=end;i<j;i++,j--){
            swap(s[i],s[j]);
        }
    }
    string reverseStr(string s, int k) {
        int len=s.size();
        int rem=len%(2*k);//若为0:恰好  0~k:翻转   k~2k:翻转前k个
        int count=len/(2*k);
        int start=0,curE=0;
        if(count==0&&rem==0) return "";
        if(count==0&&rem>0){
            if(rem<=k) curE=rem-1;
            else curE=k-1;
            reverse(start,curE,s);
        }
        if(count>0){
            curE=k-1;
            for(int i=0;i<count;i++){
                reverse(start,curE,s);
                start+=2*k;
                curE+=2*k;
            }
            if(rem>0){
                if(rem<=k) curE=len-1;
                reverse(start,curE,s);
            }
        }
        return s;
    }
};

改进后:

class Solution {
public:
    string reverseStr(string s, int k) {
        int n=s.size();
        for(int i=0;i<n;i+=2*k){
            int j=min(i+k,n);// 计算需要反转的区间结束位置
            reverse(s.begin()+i,s.begin()+j);
        }
        return s;
    }
};

卡码网:54.替换数字

文章链接:https://programmercarl.com/kama54.替换数字.html
题目链接:https://kamacoder.com/problempage.php?pid=1064

#include <iostream>
using namespace std;

int main(){
    string s;
    while(cin>>s){
        int oldInd=s.size()-1;
        int count=0;
        int n=s.size();
        for(int i=0;i<n;i++){
            if(s[i]>='0'&&s[i]<='9'){ //字符可以这样比较大小,它们被分配了ASCII码
                count++;
            }
        }
        s.resize(s.size()+count*5);
        int newInd=s.size()-1;
        for(;oldInd>=0;oldInd--){
            if(s[oldInd]>='0'&&s[oldInd]<='9'){
                s[newInd--]='r';
                s[newInd--]='e';
                s[newInd--]='b';
                s[newInd--]='m';
                s[newInd--]='u';
                s[newInd--]='n';
            }
            else{
                s[newInd--]=s[oldInd];
            }
        }
        cout << s << endl;
    }
}

标签:int,反转,随想录,https,字符串,com,size
From: https://www.cnblogs.com/VickyWu/p/18453981

相关文章

  • Python字符串基本操作
    目录一、字符串的创建1.1转义字符1.2原始字符串二、字符串的访问与切片2.1字符访问2.2切片(Slicing)三、字符串的连接与重复四、字符串的格式化4.1百分号格式化4.2 str.format() 方法4.3f-字符串(Python3.6及以上)五、字符串的方法5.1大小写转换5.2去除空......
  • 844.比较含退格的字符串
    题目:844.比较含退格的字符串-力扣(LeetCode)思路:首先要知道这个#的意思是可以将前面一个数清空,(当时 我以为是将前面一串清空。。。看了半天),由于 # 号只会消除左边的一个字符,所以对右边的字符无影响,所以我们选择从后往前遍历 S,T 字符串,以skipS和T去记录,可以清空前面......
  • 代码随想录算法训练营第四天|24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    24.两两交换链表中的节点力扣题目链接(opensnewwindow)给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]......
  • 代码随想录算法训练营第三天|链表理论基础、203.移除链表元素、707.设计链表、206.反
    链表理论基础链表的类型单链表每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。双链表单链表中的指针域只能指向节点的下一个节点。双链表:每一个节点有......
  • 代码随想录算法训练营day9|●151.翻转字符串里的单词 ●卡码网:55.右旋转字符串 ●28.
    学习资料:https://programmercarl.com/0151.翻转字符串里的单词.html学习记录:151.翻转字符串里的单词(感觉C语言能考虑巧妙解法,而python直接搞就对了)c语言:把字符串整体反转,再用双指针法(slow,fast)依次翻转每一个单词,关键在于如何移除多余空格,用slow指针找到要替换到的位置,用fast......
  • 代码随想录算法训练营 | 62.不同路径,63. 不同路径 II
    62.不同路径题目链接:62.不同路径文档讲解︰代码随想录(programmercarl.com)视频讲解︰不同路径日期:2024-10-08想法:第一行第一列只有一种方法,除此之外的各自的方法数由其左和上的格子的和得到。Java代码如下:classSolution{publicintuniquePaths(intm,intn){......
  • 三.字符串的使用与符号之一
    七.字符串的符号7.1_字符串声明一对单引号/一对双引号/一对三个单引号/一对三个双引号a='测试'b="ces"c='''hello'''d="""你好!"""print(a,b,c,d)7.2_字符串引号包裹原则外单内双,外双内单w='say:"我是字符串,多个引号包裹!"'7.......
  • 代码随想录算法训练营第七天|第454题.四数相加II,383. 赎金信,第15题. 三数之和
    第454题.四数相加II文章链接:https://programmercarl.com/0454.四数相加II.html视频讲解:https://www.bilibili.com/video/BV1Md4y1Q7Yh/题目链接:https://leetcode.cn/problems/4sum-ii/description/题目思路:首先定义一个unordered_map,key放a和b两数之和,value放a和b两数之......
  • Python 字符串基础知识
    字符串是计算机编程中非常重要的数据类型。在Python中,字符串是一系列字符的集合,可以包含字母、数字、符号和空格。Python提供了强大的字符串处理功能,使得操作字符串变得简单而直观。本文将深入探讨Python字符串的基本知识,包括字符串的创建、操作、常用方法以及字符串格式......
  • Python字符串打印格式
    一、旧式字符串格式化(%格式)在Python中,最早的字符串格式化方法是使用百分号(%)操作符。这种方式可以追溯到C语言,因此对于习惯于C语言的程序员来说是比较熟悉的。1.基本用法基本语法如下:name="Alice"age=30print("Mynameis%sandIam%dyearsold."%(name,age)......