首页 > 编程语言 >代码随想录算法day7 - 字符串1

代码随想录算法day7 - 字符串1

时间:2024-09-04 11:35:49浏览次数:11  
标签:字符 string 示例 day7 随想录 算法 字符串 输入 size

题目1 344. 反转字符串

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

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

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

思路

这道题就正常交换字符的顺序就行了。

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

题目2 541. 反转字符串 II

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

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

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104

思路

和第一道题的思路一致,要注意的就是到字符串最后的边界位置是否要反转。

class Solution {
public:
    string reverseStr(string s, int k) {
        if(k == 1 || s.size() == 1)
            return move(s);
        for(int i = 0; i < s.size();)
        {
            int lft = i, rht = k - 1 + i >= s.size() ? s.size() - 1 : k - 1 + i;
            while(lft < rht)
            {
                char c = s[lft];
                s[lft] = s[rht];
                s[rht] = c;
                lft++;
                rht--;
            }
            i += 2 * k;
        }
        return move(s);
    }
};

题目3 54. 替换数字

题目描述

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

输入描述

输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述

打印一个新的字符串,其中每个数字字符都被替换为了number

输入示例

a1b2c3

输出示例

anumberbnumbercnumber

提示信息

数据范围:
1 <= s.length < 10000。

思路

额外空间法

用两个string就可以解决这道题,第一个string对象用于保存输入示例,第二个string对象用于存储判断后的字符或number。

#include<iostream>
#include<string>


int main()
{
    using namespace std;
    string input,
           result;
    cin >> input;
    for(auto &c : input)
    {
        if(c >= '1' && c <= '9')
        {
            result += string("number");
        }
        else
            result += c;
    }
    cout << result;
    return 0;
}

扩容填充法*

这道题可以先遍历一遍,确认字符串中的数字数目,之后对string对象扩容,最后从后向前遍历得出结果。

#include<iostream>
#include<string>


int main()
{
    using namespace std;
    string result;
    cin >> result;
    int num = 0;
    for(auto &c : result)
    {
        if(c >= '0' && c <= '9')
            num++;
    }
    int lstIndex = result.size() - 1;
    result.resize(result.size() + 5 * num);
    for(int i = result.size() - 1; i >= 0; i--)
    {
        if(result[lstIndex] >= '0' && result[lstIndex] <= '9')
        {
            result[i--] = 'r';
            result[i--] = 'e';
            result[i--] = 'b';
            result[i--] = 'm';
            result[i--] = 'u';
            result[i] = 'n';
        }
        else
        {
            result[i] = result[lstIndex];
        }
        lstIndex--;
    }
    cout << result;
    return 0;
}

标签:字符,string,示例,day7,随想录,算法,字符串,输入,size
From: https://www.cnblogs.com/code4log/p/18396151

相关文章

  • Lcode算法26:队列实现栈
    请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:voidpush(intx) 将元素x压入栈顶。intpop() 移除并返回栈顶元素。inttop() 返回栈顶元素。booleanempty() 如果栈是空的,返回 true ;否则,返回......
  • SSA(麻雀优化算法)+CNN+LSTM时间序列预测算法(python代码)
    1.SSA(SparrowSearchAlgorithm)简介:SSA是一种新兴的群体智能优化算法,模拟麻雀觅食行为。麻雀群体中的“发现者”负责寻找食物,并将信息传递给“追随者”,后者根据这一信息进行觅食。SSA通过这种合作机制寻找最优解。SSA在优化问题中可以视为一种元启发式算法,擅长在复杂搜索......
  • 代码随想录算法训练营|Day06 LeetCode 242.有效的字母异位词,349.两个数组的交集,202.快
    理论知识哈希表是根据关键码的值而直接进行访问的数据结构,一般用来快速判断一个元素是否出现在集合里映射——哈希函数哈希碰撞线性探测法拉链法常用的哈希结构数组set(集合)map(映射)242.有效的字母异位词242.有效的字母异位词-力扣(LeetCode)classSolution{......
  • 算法练习题10:leetcode76最小覆盖子串-滑动窗口
    目录题目题目描述约束条件解决思路代码getOrDefault(c,0) 方法方法签名参数返回值示例getOrDefault 与 get 的主要区别Integer 题目题目描述给定两个字符串s和t,请你在字符串s中找到包含t中所有字符的最小子串。要求:        如果 s ......
  • YOLOv5 结合切片辅助超推理算法 | 这才叫让小目标无处遁形!
    引言YOLOv5作为一种高效的目标检测算法,在许多领域得到了广泛应用。然而,在处理小目标检测任务时,YOLOv5仍然面临一些挑战。切片辅助超推理算法则为解决这一问题提供了一种有效的思路。本文将深入探讨YOLOv5与切片辅助超推理算法结合的原理、实现细节、以及在小目标检测方面的优......
  • mini-lsm通关笔记Week1Day7
    Summary在上一章中,您已经构建了一个具有get/scan/put支持的存储引擎。在本周末,我们将实现SST存储格式的一些简单但重要的优化。欢迎来到Mini-LSM的第1周零食时间!在本章中,您将:在SST上实现布隆过滤器,并集成到LSM读路径get中。以SST块格式实现对key存储的压缩。要将测试用例......
  • 代码随想录day16--图论
    题目描述:给定一个由1(陆地)和0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。输入描述:第一行包含两个整数N,M,表示矩阵的行数和列数。后续N行,每行包含M个数字,数字为1或者0。输出描......
  • 代码随想录算法训练营,9月3日 | 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和
    454.四数相加II题目链接:454.四数相加II文档讲解︰代码随想录(programmercarl.com)视频讲解︰四数相加II日期:2024-09-03想法:4个数组,两两分开遍历时间复杂度低点,用一个map,key是i+j的值,value是出现次数,对nums3、4只需要判断0-k-l在不在map里,最后依次加上出现次数就行了。Java代......
  • 决策树之——ID3算法及示例
    0前言本文主要介绍决策树ID3算法,并举出构建示例帮助理解。读者需要具备的知识:信息熵、条件熵、信息增益。本文使用数据集为:游玩数据集1.1节、西瓜数据集1.2节。1ID3算法简述ID3(IterativeDichotomiser3)算法是一种经典的决策树学习算法,由RossQuinlan于1986年提出。该......
  • 代码随想录算法训练营第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
    目录509.斐波那契数1、题目描述2、思路3、code4、复杂度分析70.爬楼梯1、题目描述2、思路3、code746.使用最小花费爬楼梯1、题目描述2、思路3、code4、复杂度分析509.斐波那契数题目链接:link1、题目描述斐波那契数(通常用F(n)表示)形成的序列称为斐波那......