首页 > 其他分享 >代码随想录刷题记录(7)| 字符串(344.反转字符串,541. 反转字符串II,卡码网:54.替换数字)

代码随想录刷题记录(7)| 字符串(344.反转字符串,541. 反转字符串II,卡码网:54.替换数字)

时间:2024-06-16 16:59:58浏览次数:17  
标签:字符 right int 反转 随想录 字符串 2k

目录

(一)反转字符串

1. 题目描述

2. 思路

3. 解题过程

(二)反转字符串Ⅱ

1. 题目描述

2. 思路

3. 解题过程

(三)替换数字

1. 题目描述

2. 思路

3. 解题过程


(一)反转字符串

344. 反转字符串 - 力扣(LeetCode)

1. 题目描述

        编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

        不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

2. 思路

        双指针一头一尾,二者互换。

3. 解题过程

难易程度:简单

标签:双指针、字符串

class Solution {
public:
    void reverseString(vector<char>& s) {
        int left = 0, right = s.size() - 1;
        while(left < right){
            swap(s[left++], s[right--]);
        }
    }
};

 

(二)反转字符串Ⅱ

541. 反转字符串 II - 力扣(LeetCode)

1. 题目描述

        给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

 

2. 思路

        每 2k 个字符判断一下剩下的少于 k 则反转全部,否则反转前 k 个,剩下的不足 2k 个就退出返回。

3. 解题过程

难易程度:简单

标签:双指针、字符串

class Solution {
public:
    string reverseStr(string s, int k) {
        int i = 0;
        while(i < s.size()){
            int left = i;
            // 如果剩余少于k个,反转全部,否则反转前k个
            int right = i + k < s.size() ? i + k - 1 : s.size() - 1;
            while(left < right){
                swap(s[left++], s[right--]);
            }
            // 剩余字符少于2k个,反转完退出
            if(i + 2 * k > s.size()){
                break;
            }
            // 否则计数下2k个字符
            else{
                i += 2 * k;
            }
        }
        return s;
    }
};

(三)替换数字

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

1. 题目描述

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

2. 思路

        首先扩充数组到每个数字字符替换成 "number" 之后的大小,然后从后向前替换数字字符。

3. 解题过程

#include<iostream>
using namespace std;

int main(){
    string s;
    cin >> s;
    int count = 0;
    int n = s.size() - 1;
    for(int i = 0; i <= n; i++){
        // 统计数字个数
        if(s[i] >= '0' && s[i] <= '9'){
            count++;
        }
    }
    s.resize(s.size() + count * 5);
    int s_length = s.size() - 1;
    while(s_length >= 0){
        while(n >= 0){
            // 是数字,替换成number
            if(s[n] >= '0' && s[n] <= '9'){
                s[s_length--] = 'r';
                s[s_length--] = 'e';
                s[s_length--] = 'b';
                s[s_length--] = 'm';
                s[s_length--] = 'u';
                s[s_length--] = 'n';
            }
            else{
                s[s_length--] = s[n];
            }
            n--;
        }
    }
    cout << s;
    return 0;
}

标签:字符,right,int,反转,随想录,字符串,2k
From: https://blog.csdn.net/weixin_44839832/article/details/139680145

相关文章