力扣刷题记录——521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III

简介: 力扣刷题记录——521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III

521. 最长特殊序列 Ⅰ

题目描述

给你两个字符串 ab,请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在,则返回 -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掉就可以,最终返回最长的字符串。如果这种方法不行,可以再尝试一下指针的方法

解题代码

1. def findLUSlength(a: str, b: str):
2. if a==b:
3. return -1
4. if len(a)<= len(b):
5.         min_str = a
6.         max_str = b
7. 
8. else:
9.         min_str = b
10.         max_str = a
11. for i in max_str:
12. if i in min_str:
13.             max_str.replace(i,"")
14.             min_str.replace(i,"")
15. 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。

解题代码

1. def reverseStr(s: str, k: int):
2. print(len(s))
3. if len(s) < k:
4. return s
5.     begin = 0
6.     tem_list = []
7.     result = ""
8. while begin < len(s):
9.         tem_list.append(s[begin:begin+2*k])
10.         begin += 2*k
11. for i in tem_list:
12. if len(i) < k:
13.             i = i[::-1]
14.             result += i
15. elif len(i) == 2*k:
16.             first = i[:k]
17.             first = first[::-1]
18.             result += "".join(first)
19.             second = i[k:2*k]
20.             result += "".join(second)
21. else:
22.             first = i[:k]
23.             first = first[::-1]
24.             result += "".join(first)
25.             second = i[k:]
26.             result += "".join(second)
27. 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。

解题代码

1. def reverseWords(s: str):
2.     str_list = [i for i in s.split(" ")]
3.     result = ""
4. for i in str_list:
5.         i = i[::-1]
6.         result += i +" "
7.     result = result[:-1:]
8. 
9. return result


相关文章
|
28天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
28天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
13天前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
21 9
|
13天前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
12 0
|
13天前
Leetcode(最后一个单词长度)
这篇文章介绍了两种解决LeetCode第58题的方法,即计算给定字符串中最后一个单词的长度,方法包括翻转字符串和逆向遍历统计。
14 0
|
13天前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
26 0
|
13天前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
14 0
|
13天前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
15 0
|
13天前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
12 0
|
2月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度