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

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

时间:2024-06-12 22:54:47浏览次数:28  
标签:字符 反转 list lst str 字符串 随想录

344.反转字符串

题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

解题:

思路:双指针,秒了

点击查看代码
class Solution:
    def reverseString(self, s: List[str]) -> None:
        left=0
        right=len(s)-1
        while left<right:
            s[left],s[right]=s[right],s[left]
            left+=1
            right-=1

541.反转字符串Ⅱ

题目:给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

解题:

思路:2k补偿进行遍历。
报错:1.使用s = ''.join(s_list)而不是直接str();2.转化为list应放在最前面,否则每次在循环中,你将字符串 s 转换为列表 s_list,这样导致每次交换都是从原始字符串开始,而不是从上一次交换的结果继续;3.转化为str放在所有交换结束后,否则你在每次交换时都将 res 重新分配,这会导致最终结果只包含最后一次处理的部分。

点击查看代码
class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        s_list=list(s)
        for i in range(0,len(s),2*k):
            left=i
            right=min(i+k-1,len(s)-1)
            while left<right:
                s_list[left],s_list[right]=s_list[right],s_list[left]
                left+=1
                right-=1
        res=''.join(s_list)
        return res

卡玛网:54.替换数字

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

解题:

思路:很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
这么做有两个好处:1.不用申请新数组;2.从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。
实际上,python可以对列表化的字符串进行直接替换!

点击查看代码
s=input()
lst = list(s) # Python里面的string也是不可改的,所以也是需要额外空间的。空间复杂度:O(n)。
for i in range(len(lst)):
    if lst[i].isdigit():
        lst[i] = "number"
print(''.join(lst))

心得:

列表变成一串字符串'abc':''.join(s_list)
列表变成一个个字符'a','b','c':str(s_list)
字符串变成列表'a','b','c':list(s_str)

标签:字符,反转,list,lst,str,字符串,随想录
From: https://www.cnblogs.com/MengyiSun/p/18244899

相关文章

  • Python3 笔记:字符串的 replace() 和 expandtabs()
    1、replace()方法把字符串中的old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过max次。语法:str.replace(old,new[,max])参数:old:将被替换的子字符串。new:新字符串,用于替换old子字符串。max:可选参数,如果填写则表示替换不超过max次。str1='old......
  • golang 字节级操作和字符串的区别与转换 []byte(message)
     []byte(message)将字符串message转换为一个字节切片([]byte)。在Go语言中,字符串是不可变的,而字节切片可以被修改。这种转换常用于处理字符串的字节级操作,如编码、解码或写入IO流。 字节级操作和字符串操作在编程中有本质的不同,主要体现在以下几个方面:1.数据单位:......
  • 032指针学习—引用字符串
    目录1.字符串的引用方式(1)两种方法(2)举例(3)注意事项2.字符指针作函数参数(1)说明(2)举例(3)注意事项3.用字符指针变量和字符数组的比较1.字符串的引用方式(1)两种方法        用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格......
  • 怎么使用join将数组转为逗号分隔的字符串
    在JavaScript中,你可以使用Array.prototype.join()方法将一个数组转换为逗号分隔的字符串。join()方法接受一个可选的参数,该参数指定了数组元素之间的分隔符。如果不提供参数,则默认使用逗号(,)作为分隔符。下面是一个使用join()方法的例子:letarray=['apple','banana','cher......
  • QTime序列化时间处理(字符串与秒、毫秒互转)
    秒转为时、分、秒格式inttime_sec=11320;QStringtime=QTime(0,0,0).addSecs(static_cast<int>(time_sec)).toString(QString::fromLatin1("HH:mm:ss"));qDebug()<<time;//输出:"03:08:40"毫秒转为时、分、秒、毫秒格式inttime_ms=211320;QString......
  • 代码随想录第6天 | ●哈希表理论基础●242.有效的字母异位词●349. 两个数组的交集●2
    题目:242.有效的字母异位词思路:1.ASCII和哈希函数,存入数组,比较数组相等否2.首先选择数据结构,题目只有小写字母,ASCII连续,选用数组,一个字符串遍历,在哈希数组中存入字母出现频率,第二个字符串遍历,做减法。(不需要记ASCII,直接减字母,编译器自己算)时间复杂度:O(n)空间复杂度:O(1)坑......
  • C语言字符串处理函数strstr的用法
    C语言字符串处理函数strstr的用法在C语言中,strstr函数是一个字符串处理函数,用于在一个字符串(称为“主字符串”)中查找另一个字符串(称为“子字符串”)的首次出现。如果找到子字符串,则该函数返回一个指向主字符串中子字符串首次出现位置的指针;如果没有找到,则返回NULL。函数的原型定......
  • Python字符串操作(1)
    -----案例1:要求-----读取用户输入的一串用逗号分隔的值,然后对其中的数字进行求和,并输出结果。-----案例1:代码示例-----myinput=input("请输入:")#提示用户输入,并将输入的内容赋值给变量myinputls=myinput.split(',')#使用逗号作为分隔符,将输入的字符串分割成......
  • 代码随想录算法训练营第三十六天 | 406.根据身高重建队列
    406.根据身高重建队列题目链接文章讲解视频讲解思路:  先按照身高由大到小排序,如果身高相同,比较人数(由小到大);  按照人数重构数组,将节点插入到合适的位置classSolution{private:staticboolcompareByK(vector<int>&lhs,vector<int>&rhs){if(lhs[......
  • Day49 代码随想录打卡|二叉树篇---二叉搜索树中的搜索
    题目(leecodeT700):给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在BST中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null 。方法:递归法:本题考察了二叉搜索树的特性,二叉搜索树指的是在这个二叉树中,他的每一个根节点......