力扣刷题记录——521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III
创始人
2024-05-13 04:17:54
0

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III》。

目录

521. 最长特殊序列 Ⅰ

        题目描述

        解题思路

        解题代码

541. 反转字符串 II

        题目描述

        解题思路

        解题代码

557. 反转字符串中的单词 III

        题目描述

        解题思路

        解题代码


521. 最长特殊序列 Ⅰ

题目描述

给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度。如果不存在,则返回 -1 。

「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。

字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

  • 例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc" 中斜体加粗的字符可以得到 "abc" 。 "aebdc" 的子序列还包括 "aebdc" 、 "aeb" 和 "" (空字符串)。

示例 1:

输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。

示例 2:

输入:a = "aaa", b = "bbb"
输出:3
解释: 最长特殊序列是 "aaa" 和 "bbb" 。

示例 3:

输入:a = "aaa", b = "aaa"
输出:-1
解释: 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样,字符串 b 的每个子序列也是字符串 a 的子序列。

解题思路

如果两字符串不相同,首先判断那个是长字符串哪个是短字符串,最长特定序列一定在长的字符串中,只要遍历长的字符串,如果在短的里面存在,replase掉就可以,最终返回最长的字符串。如果这种方法不行,可以再尝试一下指针的方法

解题代码

def findLUSlength(a: str, b: str):if a==b:return -1if len(a)<= len(b):min_str = amax_str = belse:min_str = bmax_str = afor i in max_str:if i in min_str:max_str.replace(i,"")min_str.replace(i,"")return len(max_str)

顺利通关,击败率还挺高!

541. 反转字符串 II

题目描述

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

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

示例 1:

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

示例 2:

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

解题思路

首先通过while循环将列表分割,再通过遍历列表,根据i的长度进行不同的操作,注意在刚开始时要判断s和k的关系,最终返回一个result。

解题代码

def reverseStr(s: str, k: int):print(len(s))if len(s) < k:return sbegin = 0tem_list = []result = ""while begin < len(s):tem_list.append(s[begin:begin+2*k])begin += 2*kfor i in tem_list:if len(i) < k:i = i[::-1]result += ielif len(i) == 2*k:first = i[:k]first = first[::-1]result += "".join(first)second = i[k:2*k]result += "".join(second)else:first = i[:k]first = first[::-1]result += "".join(first)second = i[k:]result += "".join(second)return result

557. 反转字符串中的单词 III

题目描述

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

示例 2:

输入: s = "God Ding"
输出:"doG gniD"

解题思路

这题还是很基础的,用split切割,然后用字符串 切片倒序就可以,注意在添加末尾加上一个空格,然后最后的结果再去掉末尾的空格,返回result。

解题代码

def reverseWords(s: str):str_list = [i for i in s.split(" ")]result = ""for i in str_list:i = i[::-1]result += i +" "result = result[:-1:]return result

 

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...