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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

本专栏主要记录力扣的刷题记录备战蓝桥杯供复盘和优化算法使用也希望给大家带来帮助博主是算法小白希望各位大佬不要见笑今天要分享的是——《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 -1
    if len(a)<= len(b):
        min_str = a
        max_str = b

    else:
        min_str = b
        max_str = a
    for 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 s
    begin = 0
    tem_list = []
    result = ""
    while begin < len(s):
        tem_list.append(s[begin:begin+2*k])
        begin += 2*k
    for i in tem_list:
        if len(i) < k:
            i = i[::-1]
            result += i
        elif 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

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6