LeetCode打卡Task04-字符串篇

一、知识点介绍

1.字符串简介

混淆点:
子串、主串与子序列的概念
前缀与后缀的概念

2.字符串问题

1.字符串匹配问题
2.子串相关问题
3.前缀/后缀相关问题
4.回文串相关问题
5.子序列相关问题

3.字符串的比较

1.字符串的比较操作
2.字符串的字符编码

4.字符串的存储结构

顺序与链式存储

5.字符串匹配问题

单字符串匹配问题与多字符串匹配问题

6.单字符串朴素匹配算法(BF算法)和KMP匹配算法

next数组的构建思路与最长相同前后缀

二、例题(来源于力扣:https://leetcode-cn.com/)

1.验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
在这里插入图片描述

class Solution:
    def isPalindrome(self, s: str) -> bool:
        left=0
        right=len(s)-1
        while left<right:
            if not s[left].isalnum():
                left+=1
                continue
            if not s[right].isalnum():
                right-=1
                continue
            if s[left].lower()==s[right].lower():
                left+=1
                right-=1
            else:
                return False
        return True

2.翻转字符串里的单词
给你一个字符串 s ,逐个翻转字符串中的所有单词 。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
说明:
1.输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
2.翻转后单词间应当仅用一个空格分隔。
3.翻转后的字符串中不应包含额外的空格。
在这里插入图片描述

class Solution:
    def reverseWords(self, s: str) -> str:
        words=[]
        cur=""
        for ch in s:
            if ch==' ':
                if cur:
                    words.append(cur)
                    cur=""
            else:
                cur+=ch
        if cur:
            words.append(cur)
        for i in range(len(words)//2):
            words[i],words[len(words)-1-i]=words[len(words)-1-i],words[i]
        return " ".join(words)

3.验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
在这里插入图片描述

class Solution:
    def judge(self, s: str) -> bool:
        left=0
        right=len(s)-1
        while left<right:
            if s[left]==s[right]:
                left+=1
                right-=1
            else:
                return False
        return True
    def validPalindrome(self, s: str) -> bool:
        if self.judge(s)==True:
            return True
        left=0
        right=len(s)-1
        while left<right:
            if s[left]!=s[right]:
                return self.judge(s[left+1:right+1]) or self.judge(s[left:right])
            left+=1
            right-=1
        return True

4.Excel表列名称
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:

A -> 1
B -> 2
C -> 3

Z -> 26
AA -> 27
AB -> 28

在这里插入图片描述

class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        cur=""
        while columnNumber>26:
            columnNumber-=1
            cur+=chr(columnNumber%26+65)
            columnNumber=columnNumber//26
        cur+=chr(columnNumber+64)
        return cur[::-1]

5.字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
在这里插入图片描述

class Solution:
    def decodeString(self, s: str) -> str:
        res=""
        stack=[]
        num=0
        for ch in s:
            if ch.isdigit():
                num=num*10+int(ch)
            elif ch=='[':
                stack.append((res,num))
                res,num="",0
            elif ch==']':
                top=stack.pop()
                res=top[0]+res*top[1]
            else:
                res+=ch
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值