Leetcode打卡:字符串及其反转中是否存在同一子字符串

执行结果:通过

题目 3083 字符串及其反转中是否存在同一子字符串

给你一个字符串 s ,请你判断字符串 s 是否存在一个长度为 2 的子字符串,在其反转后的字符串中也出现。

如果存在这样的子字符串,返回 true;如果不存在,返回 false

示例 1:

**输入:**s = "leetcode"

**输出:**true

解释: 子字符串 "ee" 的长度为 2,它也出现在 reverse(s) == "edocteel" 中。

示例 2:

**输入:**s = "abcba"

**输出:**true

解释: 所有长度为 2 的子字符串 "ab""bc""cb""ba" 也都出现在 reverse(s) == "abcba" 中。

示例 3:

**输入:**s = "abcd"

**输出:**false

解释: 字符串 s 中不存在满足「在其反转后的字符串中也出现」且长度为 2 的子字符串。

提示:

  • 1 <= s.length <= 100
  • 字符串 s 仅由小写英文字母组成。

代码以及解题思路:

代码

复制代码
class Solution:
    def isSubstringPresent(self, s: str) -> bool:
        st = {(a, b) for a, b in pairwise(s[::-1])}
        return any((a, b) in st for a, b in pairwise(s))

解题思路:

  1. 反转字符串并生成字符对 :首先,将字符串 s 反转,然后使用 pairwise 函数(这个函数通常来自 itertools 模块,但在代码中没有直接给出,其作用是生成一个序列中相邻元素的二元组)生成反转字符串中相邻字符的二元组集合 st。例如,如果 s = "abc",则反转后为 "cba",生成的二元组集合为 {('c', 'b'), ('b', 'a')}

  2. 检查原字符串中的连续字符对 :接着,使用 pairwise 函数生成原字符串 s 中相邻字符的二元组,并检查这些二元组是否存在于之前生成的集合 st 中。

  3. 判断是否存在符合条件的子串 :如果原字符串中的任何一个连续字符对在反转字符串生成的字符对集合 st 中存在,那么说明可以通过删除一些字符(即不在这个字符对中的字符),使得剩下的字符能够按照原字符串中的某种非连续顺序重新排列成 s 的一个连续子串。此时,函数返回 True

  4. 返回结果 :如果遍历完所有原字符串中的连续字符对后,没有找到任何一个在集合 st 中的字符对,那么说明不存在这样的子串,函数返回 False

相关推荐
毒爪的小新4 小时前
Linux 环境极速部署 vLLM:从零搭建生产级大模型推理服务
linux·人工智能·ai·语言模型·vllm
鹤落晴春5 小时前
RH124问答3:从命令行管理文件
linux·运维·服务器
凡人叶枫5 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
火山上的企鹅5 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
Net_Walke6 小时前
【Linux系统】静态链接库与动态链接库
linux·嵌入式硬件
syc78901236 小时前
中文语境下AI编码工具实战对比:从迭代体验看日常开发选择
linux·人工智能·ubuntu
❀搜不到6 小时前
远程服务器codex使用本地cc-switch的deepseek api
运维·服务器
凡人叶枫6 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
袁小皮皮不皮6 小时前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
袁小皮皮不皮8 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip