【数据结构与算法】之字符串系列-20240127

在这里插入图片描述


这里写目录标题

  • 一、面试题 08.07. 无重复字符串的排列组合
  • 二、面试题 10.02. 变位词组
  • 三、面试题 17.11. 单词距离
  • 四、LCR 014. 字符串的排列
  • 五、LCR 020. 回文子串
  • 六、1528. 重新排列字符串

一、面试题 08.07. 无重复字符串的排列组合

中等
无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

示例1:
输入:S = “qwe”
输出:[“qwe”, “qew”, “wqe”, “weq”, “ewq”, “eqw”]

示例2:
输入:S = “ab”
输出:[“ab”, “ba”]

class S0807:
    def func(self, s):
        perm = set(permutations(s))
        return [''.join(p) for p in perm]


r = S0807()
s = "qwe"
print(r.func(s))

itertools.permutation():它指的是可以对集合或字符串进行排序或排列的所有可能的组合
用法:
permutations(iterator, r)

from itertools import  permutations
a = 'abc'   #对字符串进行permutations排列组合
for i in permutations(a,3):
    x = ''.join(i)
    print (x,end=' ')
print ('\n------------------------------------')

在这里插入图片描述

二、面试题 10.02. 变位词组

中等
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
注意:本题相对原题稍作修改
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

class S1002:
    def func(self, s):
        dic = defaultdict(list)
        for i in s:
            key = ''.join(sorted(i))
            dic[key].append(i)
        return list(dic.values())


res = S1002()
s = ["eat", "tea", "tan", "ate", "nat", "bat"]
print(res.func(s))

三、面试题 17.11. 单词距离

中等
有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。
如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?

示例:
输入:words = [“I”,“am”,“a”,“student”,“from”,“a”,“university”,“in”,“a”,“city”],
word1 = “a”, word2 = “student”
输出:1

class S1711:
    def func(self, words, word1, word2):
        ans = inf
        idx1 = inf  # 正无穷
        idx2 = -inf  # 负无穷
        for i, word in enumerate(words):
            # print(i,word)
            if word1 == word:
                idx1 = i
            elif word2 == word:
                idx2 = i
            ans = min(ans, abs(idx1 - idx2))
        return ans


r = S1711()
words = ["I", "am", "a", "student", "from", "a", "university", "in", "a", "city"]
word1 = "a"
word2 = "student"
print(r.func(words, word1, word2))

四、LCR 014. 字符串的排列

中等

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。

示例 1:
输入: s1 = “ab” s2 = “eidbaooo”
输出: True
解释: s2 包含 s1 的排列之一 (“ba”).

示例 2:
输入: s1= “ab” s2 = “eidboaoo”
输出: False

class S014:
    def func(self, s1, s2):
        s1_len = len(s1)
        s2_len = len(s2)
        for i in range(s2_len - s1_len + 1):
            temp = s2[i:i + s1_len]
            if temp == s1 or Counter(s1) == Counter(temp):
                return True
        return False


s = S014()
s1 = "ab"
s2 = "eidboaoo"
print(s.func(s1, s2))

五、LCR 020. 回文子串

中等
给定一个字符串 s ,请计算这个字符串中有多少个回文子字符串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:
输入:s = “abc”
输出:3
解释:三个回文子串: “a”, “b”, “c”

示例 2:
输入:s = “aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”

class Solution:
    def countSubstrings(self, s: str) -> int:
        def check_chr(s, left, right, con):
            while left >= 0 and right < len(s) and s[left] == s[right]:
                left -= 1
                right += 1
                con += 1
            return con

        res = 0
        for i in range(len(s)):
            con1 = check_chr(s, i, i, 0)  # 以当前索引位置为中心,获取存在的所有回文数
            con2 = check_chr(s, i, i + 1, 0)  # 以当前索引位置和当前索引位置的下一位置为中心,获取存在的所有回文数
            res += con1 + con2

        return res

六、1528. 重新排列字符串

简单

给你一个字符串 s 和一个 长度相同 的整数数组 indices 。
请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。
返回重新排列后的字符串。

示例 1:
输入:s = “codeleet”, indices = [4,5,6,7,0,2,1,3]
输出:“leetcode”
解释:如图所示,“codeleet” 重新排列后变为 “leetcode” 。

示例 2:
输入:s = “abc”, indices = [0,1,2]
输出:“abc”
解释:重新排列后,每个字符都还留在原来的位置上。

class S1528:
    def func(self, s, indices):
        res = list(zip(s, indices))
        res1 = sorted(res, key=lambda x: x[
            1])  # [('l', 0), ('e', 1), ('e', 2), ('t', 3), ('c', 4), ('o', 5), ('d', 6), ('e', 7)]
        return ''.join([i[0] for i in res1])


r = S1528()
s = "abc"
indices = [0, 1, 2]
print(r.func(s, indices))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】

Deepin基本环境查看 - 目录Deepin基本环境查看&#xff08;一&#xff09;【基本信息】Deepin基本环境查看&#xff08;二&#xff09;【内存】Deepin基本环境查看&#xff08;三&#xff09;【网络信息】Deepin基本环境查看&#xff08;四&#xff09;【硬盘/分区、文件系统、…

Python接口自动化框架设计到开发,赶紧用起来!

1.如何设计一个接口自动化测试框架 根据接口地址、接口类型、请求数据、预期结果来进行设计&#xff0c;对于需要登录后才能进行操作的接口那么则需要进行header cookie等数据的传递&#xff0c;自动化测试的难点就是数据依赖。 2.python操作excel获得内容 首先python操作exce…

Unity架构师进阶:红点系统的架构与设计

面试的时候经常被问道如何来设计一个红点系统,本文将详细地介绍如何设计一个红点系统&#xff0c;有哪些接口&#xff0c;并完整地给出实现。 红点系统的需求分析 首先我们来分析一下红点系统的设计需求: 红点系统严格意义上来说不属于框架&#xff0c;而是游戏逻辑&#xff…

某工业级剪纸包装机辐射整改实例

摘要 某一客户工业级剪纸包装机器出口欧洲需要做CE认证&#xff0c;其中一项需要符合EMC Directive 2004/108/EC里面的EN 61000-6-4:2007&#xff0c;其中就需要符合标准中的辐射发射限值要求。但是&#xff0c;在CE-EMC认证过程中&#xff0c;测试辐射发射出现不合格现象。关键…

设计模式_访问者模式_Visitor

案例引入 要求 测评系统需求&#xff1a;将观众分为男人和女人&#xff0c;对歌手进行测评&#xff0c;当看完某个歌手表演后&#xff0c;得到他们对该歌手不同的评价(比如 成功、失败 等) 传统方案 Man和Woman里面都有“成功”、“失败”的方法 【分析】 如果系统比较小&…

国民技术N32G430C8开发笔记一-新建IAR工程

一、创建IAR工程 1、新建工程&#xff0c;保存到project文件夹。 2、添加SDK到工程。 根据原厂SDK的文件结构在IAR新建相应分组&#xff0c;把各个文件夹的文件加载进去&#xff0c;其中startup文件选择IAR平台的startup_n32g430_EWARM.s。 3、添加头文件路径&#xff0…

Python编程 从入门到实践(项目二:数据可视化)

本篇为实践项目二&#xff1a;数据可视化。 配合文章python编程入门学习&#xff0c;代码附文末。 项目二&#xff1a;数据可视化 1.生成数据1.1 安装Matplotlib1.2 绘制简单的折线图1.2.1 修改标签文字和线条粗细1.2.2 校正图形1.2.3 使用内置样式1.2.4 使用scatter()绘制散点…

Asp.Net Core 获取应用程序相关目录

在ASP.NET Core中&#xff0c;可以通过以下三种方式获取应用程序所在目录&#xff1a; 1、使用AppContext.BaseDirectory属性&#xff1a; string appDirectory AppContext.BaseDirectory; 例如&#xff1a;D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\ 2、使用…

IDEA 安装阿里Java编码规范插件

1.File>Settings 2.安装之后重启 开发过程中如果有不符合规范的地方&#xff0c;会自动出现提示

侯捷《C++标准11-14》笔记

P2: 模板编程中的… 模板编程时&#xff0c;“…”表示可以接受任意数量和类型的参数&#xff0c;具有极大的灵活性。函数调用时&#xff0c;参数个数不定会被分解成一包一包的参数传入。从而通过递归把不定个数的参数一一分解。 #include <iostream> using namespace …

vit细粒度图像分类(二)SwinFC 学习笔记

1.摘要&#xff1a; 针对细粒度图像类间差异小、类内差异大等问题&#xff0c;提出了一种基于Swin及多尺度特征融合的模型&#xff08;SwinFC&#xff09;。 基准骨干网络采用具有多阶段层级架构设计的Swin Transformer模型作为全新视觉特征提取器&#xff0c;从中获取局部和全…

【CentOS】Linux 文件权限与权限修改

目录 1、Linux 中的文件属性 2、如何修改文件属性与权限 3、目录权限与文件权限的区别 4、Linux 中的文件扩展名 用户与用户组是Linux文件权限的重要组成部分。 首先&#xff0c;一定要明确用户与用户组的概念&#xff1a; Linux 一般将文件可读写的身份分为三个类别&#…

Redis 击穿、穿透、雪崩产生原因解决思路

大家都知道&#xff0c;计算机的瓶颈之一就是IO&#xff0c;为了解决内存与磁盘速度不匹配的问题&#xff0c;产生了缓存&#xff0c;将一些热点数据放在内存中&#xff0c;随用随取&#xff0c;降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是&#xff0c;无论是击穿…

Qt中Widget样式表实现圆弧边框

第一步 第二步 第三步 第四步 //插入border-radius: 10px; border: 2px solid #000; 效果图

文本分类识别系统Python+卷积神经网络算法+TensorFlow+Django网页界面

一、介绍 文本分类系统&#xff0c;使用Python作为主要开发语言&#xff0c;通过选取的中文文本数据集&#xff08;“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”&#xff09;&#xff0c;基于Te…

8-小程序数据promise化、共享、分包

小程序API Promise化 wx.requet 官网入口 默认情况下&#xff0c;小程序官方异步API都是基于回调函数实现的 wx.request({method: , url: , data: {},header: {content-type: application/json // 默认值},success (res) {console.log(res.data)},fail () {},complete () { }…

云计算中的弹性是什么?

云弹性是指当客户需求增加或减少时&#xff0c;自动从数据中心配置和取消配置资源。这使得云资源(包括计算、存储和内存资源)能够根据需求变化快速重新分配。CPU/处理、内存、输入/输出带宽和存储容量等计算资源可以根据需要增加或减少&#xff0c;而不会影响系统性能。 它旨在…

归并排序和计数排序讲解

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 前言归并排序&#xff08;递归&#xff09;动图&#xff1a;代码实现以下是代码详细讲解&#xff1a; 归并排序非递归代码实现以下是代码详细讲解&…

c# cad2016选择封闭多段线获取多段线面积

在C#中&#xff0c;如果你想要通过AutoCAD .NET API来选择封闭多段线内部的其他闭合多段线并计算它们各自的面积&#xff0c;可以遵循以下基本步骤&#xff1a; 1、加载AutoCAD库&#xff1a; 确保你的C#项目引用了Autodesk.AutoCAD.Interop和Autodesk.AutoCAD.Interop.Common…

C语言-预处理

1.C语言的编译过程&#xff1a; 预处理、编译、汇编、链接 gcc -E hello.c -o hello.i 1、预处理 gcc -S hello.i –o hello.s 2、编译 gcc -c hello.s -o hello.o 3、汇编 gcc hello.o -o hello_elf 4、链接 1&#xff1a;预编译…