Python蓝桥杯训练:数组和字符串 Ⅰ
创始人
2024-05-05 03:43:55
0

Python蓝桥杯训练:数组和字符串 Ⅰ

文章目录

  • Python蓝桥杯训练:数组和字符串 Ⅰ
    • 一、题目[1]:确定字符串是否包含唯一字符
    • 二、题目[2]:确定字符串是否是另一个的排列
    • 三、题目[3]:确定字符串是否是另一个的旋转
    • 四、题目[4]:压缩字符串

一、题目[1]:确定字符串是否包含唯一字符

本次挑战中,你需要在 unique_chars.py 文件中补充函数 has_unique_chars 的空缺部分。

  • has_unique_chars 函数接受一个参数,string 用于指定传入的字符串;
  • has_unique_chars 函数输出一个布尔值,即 True 或者 False

你需要补充 has_unique_chars 函数,使其可以识别传入的 string 字符串的字符是否是唯一的,即有没有重复的字符。要求如下:

  • 如果传入字符串的字符是唯一的,则返回 True
  • 如果传入字符串的字符是有重复的,则返回 False
  • 如果传入的字符串为 None,也返回 False

我们在判断传入字符串是否为None时,可以直接使用“is”来做判断,另外判断传入字符串的字符是否唯一,这里考察的是去重问题,我们都知道在Python中set()函数可以创建一个无序不重复的集合,可以进行关系测试,删除重复数据,那么正好我们可以利用这一点来判断字符串的字符是否是唯一的,将传入字符串转换为集合类型,然后比较转换前和转换和两者的长度是否相等,如果相等则表示传入字符串的字符是唯一的,否则就是重复的,具体代码实现如下:

class UniqueChars(object):def has_unique_chars(self, string):if string is None:return Falsereturn len(set(string)) == len(string)

二、题目[2]:确定字符串是否是另一个的排列

本次挑战中,你需要在 permutation.py 文件中补充函数 is_permutation 的空缺部分。

  • is_permutation 函数接受两个参数,str1str2 用于指定传入的两个字符串;
  • is_permutation 函数输出一个布尔值,即 True 或者 False

你需要补充 is_permutation 函数,使其可以识别 str2 字符串是否是 str1 字符串的排列。要求如下:

  • 如果 str2 字符串是 str1 字符串的排列,则返回 True
  • 如果 str2 字符串不是 str1 字符串的排列,则返回 False
  • 如果传入的字符串有 None,或者有空字符串,则返回 False

本题判断传入字符串是否为None的方法跟上题一样,判断是否有空字符串直接使用“==”判断字符串是否为空即可,判断一个字符串是否是另一个的排序,我们可以使用排序函数sorted()对两个字符串进行排序然后判断是否一样,具体代码实现如下:

class Permutations(object):def is_permutation(self, str1, str2):if str1 is None or str2 is None or str1 == '' or str2 == '':return Falsereturn sorted(str1) == sorted(str2)

三、题目[3]:确定字符串是否是另一个的旋转

本次挑战中,你需要在 rotation.py 文件中补充函数 is_substring 及函数 is_rotation 的空缺部分。

  • is_substring 函数接受两个参数,s1s2 用于指定传入的两个字符串;
  • is_substring 函数用于判断传入的一个字符串是否是另一个的子字符串,它需要返回一个布尔值。
  • is_rotation 函数接受两个参数,s1s2 用于指定传入的两个字符串;
  • is_rotation 函数需调用 is_substring 函数,但仅可调用一次;
  • is_rotation 函数输出一个布尔值,即 True 或者 False

你需要补充 is_substring 函数及 is_rotation 函数,使 is_rotation 函数可以识别传入的 s2 字符串是否是 s1 字符串的旋转。要求如下:

  • 如果 s2 字符串是 s1 字符串的旋转,则返回 True
  • 如果 s2 字符串不是 s1 字符串的旋转,则返回 False
  • 如果传入的字符串有一个是 None 或者空字符,但另外一个不是时,也返回 False

这里旋转的意思是如果将 s1 从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到 s2 ,那么说字符串 s2 是字符串 s1 的旋转。

通过上面的要求我们可以通过在is_substring 函数中使用“in”来判断一个字符串是否是另一个的子字符串,即s1 是否包含在s2 中。is_rotation 函数中则首先判断两个字符串是否为None以及两者长度是否一样,最后调用is_substring 函数进行判断,具体代码实现如下:

class Rotation(object):def is_substring(self, s1, s2):return s1 in s2def is_rotation(self, s1, s2):if s1 is None or s2 is None:return Falseif len(s1) != len(s2):return Falsereturn self.is_substring(s1, s2 + s2)

四、题目[4]:压缩字符串

压缩的要求如下:

  • 需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
  • 压缩的格式是将连续相同字符替换为字符+数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"

本次挑战中,你需要在 compress_str.py 文件中补充函数 compress 的空缺部分。

  • compress 函数接受一个参数,string 用于指定传入的字符串;
  • compress 函数输出一个字符串。

你需要补充 compress 函数,使 compress 函数可以对传入的 string 字符串进行压缩。要求如下:

  • 判断传入的字符串是否需要进行压缩,如果不需要压缩,返回原字符串;
  • 如果需要压缩,返回压缩后的字符串;
  • 如果传入的字符串是 None 或者空字符串,返回 None 或者空字符串。

这题我想了比较久,我也是第一次接触这类题目,题目要求的压缩字符串,就是将重复的字符转换成它本身加出现的次数组成一个新字符串输出,这里提供一个简单的思路,具体实现看后面的代码部分,我们首先需要判断字符串是否是None和空字符串,这个跟之前的题目一样,然后我们定义一个新空字符串result用于后面赋值,然后定义两个辅助参数countindex用于for循环内判断,然后定义一个字符串str1,将原字符串赋值给它,并在最后添加一个字符,防止出现“IndexError: string index out of range”即索引越界的错误,然后就是for循环内,先定义一个新字符串pre_char它依次等于str1中的每个字符串,然后判断str1中的每个位置的字符串是否和per_char中的一致,如果一致,则count加一,如果某个位置的字符串两者不一致,则先判断count是否大于1,如果大于1,则将当前字符加上循环的次数count添加到result,如果count小于1,则证明该字符串只出现了一次,只需要将该字符添加到result中,循序一遍之后令index加1,依次进行直到全部结束,最后返回result,并判断result的长度是否小于原字符串的长度,如果小于就返回,否则就返回原字符串,我一开始就没有主要到这个问题,因为题目中有个隐藏要求,那就是需要在压缩后字符串比原字符串长度更短时进行压缩。所以如果原字符串是 AABBCC 时,如果压缩,结果是 A2B2C2,与原字符串长度相同,不需要进行压缩。所以对于原字符串是 AABBCC ,需要返回的结果是 AABBCC。具体代码实现如下:

class CompressString(object):def compress(self, string):if string is None or not string:return stringresult = ''count, index = 1, 1str1 = string + '&'for char in range(len(string)):pre_char = str1[index]if str1[char] == pre_char:count += 1else:if count > 1:result += str1[char] + str(count)else:result += str1[char]count = 1index += 1return result if len(result) < len(string) else string

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...