首页 > 其他分享 >LeetCode字符串

LeetCode字符串

时间:2025-01-15 22:58:36浏览次数:3  
标签:字符 right len lit 字符串 LeetCode left

LeetCode字符串

LeetCode字符串刷题记录

基础知识

字符串和数组很相似

  • 每个元素的数据类型相同
  • 都可以通过下标索引访问

字符串比大小

从第0个位置开始,依次比较对应位置上的字符编码大小

def compare(str1, str2):
    i = 0
    j = 0
    while i < len(str1) and j< len(str2):
        if ord(str1[i]) == ord(str2[j]):
            index1 += 1
            index2 += 1
        elif ord(str1[i]) < ord(str2[j]):
            return -1
        else:
            return 1
    if len(str1) < len(str2):
        return -1
    elif len(str1) > len(str2):
        return 1
    else:
        return 0

存储结构

字符串分为顺序存储结构和链式存储结构

  1. 顺序:连续的地址里一次存储各个字符,每个字符所占的存储空间相同
  2. 链式:用链表结构存储,每个节点的数据域可以存储不同大小的数据

反转字符串

class Solution:
    def reverseString(self, s: List[str]) -> None:
        left = 0
        right = len(s)-1
        while right > left:
            s[right],s[left] = s[left], s[right]
            right -= 1
            left += 1

进阶:反转 2 k 2k 2k个字符中的前 k k k个,如果剩余字符少于 k k k个,则反转所有剩余字符,如果剩余字符大于等于 k k k个,反转前 k k k个

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        lit = list(s)
        for i in range(0, len(s), 2*k):
            left = i
            right = i + k - 1
            while right < len(s) and left < right:
                lit[left],lit[right] = lit[right], lit[left]
                left += 1
                right -= 1
        if i + k > len(s):
            left = i
            right = len(s) - 1
            while left < right:
                lit[left],lit[right] = lit[right], lit[left]
                left += 1
                right -= 1
        return ''.join(lit)

注意

  • 如果剩余字符大于等于 k k k个,反转前 k k k个 着条逻辑我已经在for循环内部的while循环解决了
  • 外部的if i + k > len(s):是在判断剩余字符是否少于k
  • 过于复杂,其实如果利用python的切片特性,根本不需要单独判断是最后剩余字符的数目,因为如果s[start:end] end超出索引范围,则返回到字符串末尾
class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        lit = list(s)   
        for i in range(0, len(s), 2*k):
            lit[i:i + k] = lit[i:i + k][::-1] 
        return ''.join(lit)

替换数字

lit = list(input())

for i in range(len(lit)):
    if lit[i] >= '0' and lit[i] <= '9':
        lit[i] = 'number'
        
print(''.join(lit))

python不能直接更改字符串的值,所以必须要开辟新空间,但是如果是用c++,可以尝试在原数组基础上更改,但个人感觉没带来太大的效益,算法的时间复杂度虽然还是同一等级,但是确实运行时要长一些

#include <iostream>
using namespace std;

int main() {
    string s;
    while (cin >> s) {
        int sOldIndex = s.size() - 1;  
        int count = 0;  

        // 统计数字字符的个数
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                count++;
            }
        }

        // 扩充字符串s的大小,每个数字替换为"number"(6个字符)
        s.resize(s.size() + count * 5);  // 因为 "number" 比单个数字多 5 个字符

        int sNewIndex = s.size() - 1;  

        // 从后往前将数字替换为"number"
        while (sOldIndex >= 0) {
            if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
                s[sNewIndex--] = 'r';
                s[sNewIndex--] = 'e';
                s[sNewIndex--] = 'b';
                s[sNewIndex--] = 'm';
                s[sNewIndex--] = 'u';
                s[sNewIndex--] = 'n';
            } else {
                s[sNewIndex--] = s[sOldIndex];
            }
            sOldIndex--;
        }

        cout << s << endl;
    }
    return 0;
}

字符串匹配

子串

前缀后缀

回文串

子序列

标签:字符,right,len,lit,字符串,LeetCode,left
From: https://blog.csdn.net/CinderGirl/article/details/145169857

相关文章

  • LeetCode题练习与总结:省份数量--547
    一、题目描述有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 nxn 的矩阵 isConnected ,其......
  • LeetCode题练习与总结:游戏玩法分析 Ⅳ -- 550
    一、题目描述SQLSchema> PandasSchema> Table: Activity+--------------+---------+|ColumnName|Type|+--------------+---------+|player_id|int||device_id|int||event_date|date||games_played|int|+----......
  • LeetCode题练习与总结:移除盒子--546
    一、题目描述给出一些不同颜色的盒子 boxes ,盒子的颜色由不同的正数表示。你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >=1),这样一轮之后你将得到 k*k 个积分。返回 你能获得的最大积分和 。示例1:......
  • js 关于日期字符串转日期格式(Date)时间增加了8小时
    转换的日期字符串2025-01-15转换vardateStr='2025-01-15'vardate=newDate(dateStr).getTime()结果:WedJan15202508:00:00GMT+0800(中国标准时间)原因:如果有日期前导有0(即表示以ISO格式表示日期),Javascript引擎就假设用户处于格林尼治国际标准时的时区,所......
  • LeetCode:21.合并两个有序链表
    LeetCode:21.合并两个有序链表解题思路与归并排序中的合并两个有序数组很相似。将数组替换成链表就能解此题。解题步骤新建一个新链表,作为返回结果。用指针遍历两个有序链表,并比较两个链表的当前节点,较小者先接入新链表,并将指针后移一步。链表遍历结束,返回新链表。/***Defini......
  • 210. 课程表 II【 力扣(LeetCode) 】
    文章目录零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码零、原题链接210.课程表II一、题目描述  现在你总共有numCourses门课需要选,记为0到numCourses-1。给你一个数组prerequisites,其中prerequisites[i]=[ai,bi],表示在选修课......
  • 字符串dp+匹配
    https://codeforces.com/problemset/problem/2050/E#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'usingll=longlong;usingpii=pair<char,int>;constdoublePI=acos(-1);constintN=1e3+10;constintmod=1e9......
  • 判断字符串是否为json字符串方法
    要验证一个字符串是否为有效的JSON格式,可以使用JavaScript的JSON.parse()方法,并结合try...catch语句来捕获解析过程中可能出现的异常。以下是一个示例函数:functionisJSON(str){if(typeofstr==='string'){try{constobj=JSON.par......
  • 宽窄字节3:宽窄字节字符串的转换
    文章目录前言一、为什么要进行转换?二、使用微软提供的API函数实现宽窄字节转换三、使用ATL提供的CA2W、CW2A、CT2W、CT2A来更方便地转换总结前言宽窄字节3:宽窄字节字符串的转换。一、为什么要进行转换?并不是程序中所有的字符串都用Unicode宽字节来表示,如网络发送......
  • 【C语言】_字符串函数strcpy
    目录1. 函数声明及功能2.使用示例3.注意事项4. 模拟实现4.1第一版:基本功能+判空+const修饰4.2第二版:优化对于'\0'的单独拷贝4.3第三版:仿strcpy的char*返回值1. 函数声明及功能char*strcpy(char*destination,constchar*source); strcpy功能:字......