本次挑战中,你需要在
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)
本次挑战中,你需要在
permutation.py
文件中补充函数is_permutation
的空缺部分。
is_permutation
函数接受两个参数,str1
,str2
用于指定传入的两个字符串;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)
本次挑战中,你需要在
rotation.py
文件中补充函数is_substring
及函数is_rotation
的空缺部分。
is_substring
函数接受两个参数,s1
,s2
用于指定传入的两个字符串;is_substring
函数用于判断传入的一个字符串是否是另一个的子字符串,它需要返回一个布尔值。is_rotation
函数接受两个参数,s1
,s2
用于指定传入的两个字符串;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)
压缩的要求如下:
- 需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
- 压缩的格式是将连续相同字符替换为字符+数字形式,例如
"AAABCCDDDD"
变为"A3BC2D4"
。本次挑战中,你需要在
compress_str.py
文件中补充函数compress
的空缺部分。
compress
函数接受一个参数,string
用于指定传入的字符串;compress
函数输出一个字符串。你需要补充
compress
函数,使compress
函数可以对传入的string
字符串进行压缩。要求如下:
- 判断传入的字符串是否需要进行压缩,如果不需要压缩,返回原字符串;
- 如果需要压缩,返回压缩后的字符串;
- 如果传入的字符串是
None
或者空字符串,返回None
或者空字符串。
这题我想了比较久,我也是第一次接触这类题目,题目要求的压缩字符串,就是将重复的字符转换成它本身加出现的次数组成一个新字符串输出,这里提供一个简单的思路,具体实现看后面的代码部分,我们首先需要判断字符串是否是None和空字符串,这个跟之前的题目一样,然后我们定义一个新空字符串result
用于后面赋值,然后定义两个辅助参数count
和index
用于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
下一篇:spring之静态代理