首页 > 编程语言 >代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串、leetcode28.找出字符串中第一个匹配项的下标、leetcode459. 重复的子字符串

代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串、leetcode28.找出字符串中第一个匹配项的下标、leetcode459. 重复的子字符串

时间:2024-11-02 21:16:04浏览次数:6  
标签:第九天 return 随想录 split str 字符串 链接 翻转

1 leetcode151.翻转字符串里的单词

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:字符串复杂操作拿捏了! | LeetCode:151.翻转字符串里的单词哔哩哔哩bilibili

自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作,因为字符串不可以操作

1.1 自己的代码
class Solution:
    def reverseWords(self, s: str) -> str:
        s = s.split()
        s = list(s)
        left = 0
        right = len(s)-1
        while left<right:
            s[left],s[right] = s[right],s[left]
            left +=1
            right -=1
        return ' '.join(s)
1.2 视频后的学习
1.2.1 字符串内部的操作

思路

  1. 先对字符串首尾空格进行删除的操作

  2. 翻转整个字符串

  3. 将翻转后的字符串用split分割

  4. 对分割后的字符串在进行翻转

  5. join函数进行连接

细节

  1. 删除字符串中的首尾空格是str.strip()

  2. 将字符串分割为列表是str.split()

class Solution:
    def reverseWords(self, s: str) -> str:
        s= s.strip()
        s = s[::-1]
        word = ' '.join(words[::-1] for words in s.split())
        return word
1.2.2 拆分+翻转

思路

  1. 先将字符串拆分成列表

  2. 对列表内的元素进行翻转

  3. 使用join函数对其进行连接

class Solution:
    def reverseWords(self, s: str) -> str:
        s= s.split()
        s= s[::-1]
        return ' '.join(s)
1.3 本题小结
  1. python中字符串类型是不可变类型,所以必须要转换成列表再进行后面的操作

  2. 学会了两个函数split()将字符串拆分成数组;strip()函数是将字符串头尾的空格删除

2. 卡码网55.右旋字符串

题目链接:55. 右旋字符串(第八期模拟笔试)

文章链接:右旋字符串 | 代码随想录

自己的思路:开始真的有些不知所措,看了别人的方法觉得自己真的有点傻,,,

2.1文章学习思路
2.1.1 直接切片翻转
k = int(input())
s = input()
print(s[-k:]+s[:-k])
2.1.2 切片位置变化
k = int(input())
s = input()
print(s[len(s)-k:]+s[:len(s)-k])
2.2 本题小结
  1. 这道题开始没思路,后来看了别人的方法,默默说了一句,我好傻呀,这题我都不会做

  2. python中我对切片掌握的真的还没那么好,所以要记住字符串不能换位置但是可以切片

3 leetcode28.找出字符串中第一个匹配项的下标

题目链接:28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)

文章链接:代码随想录

3.1 暴力搜索

针对KMP算法,还没学会,先用简单方法做一下

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        n = len(needle)
        i = 0
        for i in range(len(haystack)):
            if haystack[i:i+n] == needle:
                return i
        return -1

4 leetcode459. 重复的子字符串

题目链接:459. 重复的子字符串 - 力扣(LeetCode)

文章链接:代码随想录

4.1 文章后的思路

发现这种题真的就是考察思路,我自己写的时候就是不知道咋办,后来看别人画的图以后,我就明白了,就是将两个字符串拼接,如果是重复的,那么破坏了本身结构后依然可以找到这个字符串

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        new_s = s+s
        if s in new_s[1:len(new_s)-1]:
            return True
        return False

5.本章小结

  1. 这一块的题目整体而言比较简单,但是就是思考起来,切片掌握的真的不是很好,总是不知道如何切片,日常使用过程中也是经常使用索引,所以这个知识点给忘了

  2. split函数是将字符串转换成列表的

  3. strip函数是将字符串的首尾空格去掉的

  4. 学习一下KMP,发现这个题目也可以另辟蹊径做出来,KMP的思想下一次在写吧

标签:第九天,return,随想录,split,str,字符串,链接,翻转
From: https://blog.csdn.net/angela3264/article/details/143440987

相关文章

  • C和C++的字符串有什么不同?
    C字符串C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,且以字符 \0结尾;#include<stdio.h>intmain(){ charstr[4]="sv";//charstr[3]="sv";是错的 charstr[]="sv"; charstr[4]={'s','','v'......
  • 动态规划-回文串系列——1312.让字符串变成回文串的最小插入次数
    1.题目解析题目来源:1312.让字符串变成回文串的最小插入次数——力扣测试用例2.算法原理1.状态表示一维dp表无法存储任意区间内将字符串变为回文子串的最小插入次数,所以使用二维dp表存储将[i,j]区间的字符串变为回文子串的最小插入次数dp[i][j]:将[i,j]区间的字......
  • 数组篇-代码随想录
    数组篇跳-二分查找-704-力扣classSolution{publicintsearch(int[]nums,inttarget){if(nums==null||nums.length==0)return-1;if(target<nums[0]||target>nums[nums.length-1])return-1;intleft=0,......
  • 代码随想录一刷day6 (链表day2)(链表完结)
    24.两两交换链表中的节点分三步走;1.创建dummyhead2.三个指针 cur  t1 t23.  cur->next=t2;  t1->next=t2->next;  t2->t1->next; 最后让cur=t1;注意最后返回的是dummyhead-》next 而不是head;注意最后deletedummyhead19.删除链表的倒数第N个节点注......
  • python之字符串总结
     字符串(str)对于字符串的学习,我整理了网上的一些资料,希望可以帮助到各位!!!概述由多个字母,数字,特殊字符组成的有限序列字符串的定义:可以使用一对单引号或者双引号,也可以一对三个单引号或者一对三个双引号定义字符串。注意:没有单符号的数据类型'a'"a"s1='......
  • 8.字符串
    字符串开题顺序:\(HABE\)\(A\)luoguP3501[POI2010]ANT-Antisymmetry多倍经验:SP15569Antisymmetry题解\(B\)luoguP4555[国家集训队]最长双回文串题解\(C\)luoguP6114【模板】Lyndon分解\(D\)BZOJ2176Strangestring\(E\)CF471DMUHandCubeWalls题......
  • 代码随想录一刷Day6--链表day1
    1.增加虚拟头节点,使头节点的移除跟别的移除统一(否则头节点需要让head指针往后移)2.删除节点的话,注意delete203.移除链表元素对链表的操作有点不熟悉ListNode*DummyHead=newListNode(0,head);  使用new进行虚拟头节点的创建删除tmp删除分支时,不用让cur=cur-》next 70......
  • 【数据结构-邻项消除】力扣1047. 删除字符串中的所有相邻重复项
    给出由小写字母组成的字符串s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在s上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在“abbaca”中,我们可以......
  • 模拟实现字符串函数
    今天给大家分享几个字符串函数的模拟实现,它们分别是strlen,strcpy,strcat函数。这几个函数我上一期已经介绍过了,那么今天我就不过多介绍它们了,今天着重来看它们是如何实现的1.strlen函数我们先看代码这个函数的逻辑便是记录\0之前的字符,那么我们便可以通过计数器来实现,用一......
  • 字符串函数
    大家好,今天我们来了解几个字符串函数1.strcpy函数这个函数是一个字符串复制函数,其全称为stringcopy,它可以将一个源字符数组的内容复制到目标字符数组中,我们需要关注几个问题,首先源字符串必须以\0结束,拷贝时会将\0也一起拷贝过去,目标空间内存要足够大,目标空间必须可变,如果大家......