没有基础?来这里看看,Python必做题(第1天)超级适合新手!!!!

一.数组和字符串

1.确定字符串是否包含唯一字符


挑战介绍:
实现一个算法来识别一个字符串的字符是否是唯一的。

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

        has_unique_chars 函数接受一个参数,string 用于指定传入的字符串;
        has_unique_chars 函数输出一个布尔值,即 True 或者 False。
        你需要补充 has_unique_chars 函数,使其可以识别传入的 string 字符串的字符是否是唯一的,即有没有重复的字符。要求如下:

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


请自己先独立思考,然后再查看代码哦!

代码如下:

def has_unique_chars(self, string):

    if string is None:
        return False

    for i in range(len(string)):
        for j in range(i+1, len(string)):
            if string[i] == string[j] and i != j:
                return False
    return True

2.确定字符串是否是另一个的排列

挑战介绍:
         实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:

        如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。
挑战内容:


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

        is_permutation 函数接受两个参数,str1,str2 用于指定传入的两个字符串;
        is_permutation 函数输出一个布尔值,即 True 或者 False。
你需要补充 is_permutation 函数,使其可以识别 str2 字符串是否是 str1 字符串的排列。要求如下:

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


请自己先独立思考,然后再查看代码哦!

代码如下:

def is_permutation(self, str1, str2):
    if str1 is None or str2 is None:
        return False
    else:
        if len(str1) == len(str2):
            for i in str2:
                if i not in str1:
                    return False
            return True
        else:
            return False

3.确定字符串是否是另一个的旋转

挑战介绍:
        实现一个算法来识别一个字符串 s2 是否是另一个字符串 s1 的旋转。旋转的解释如下:
如果将 s1 从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到 s2 ,那么说字符串 s2 是字符串 s1 的旋转。
挑战内容:
        本次挑战中,你需要补充函数 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。


请自己先独立思考,然后再查看代码哦!

代码如下:

def is_substring(s1, s2):
    if s1 not in s2:
        return False
    else:
        return True


def is_rotation(s1, s2):
    # 如果传入的字符串有一个是 None 或者空字符,但另外一个不是时,返回 False。
    if s1 is None or s2 is None or len(s1) != len(s2):
        return False
    # 将s1与自身拼接,检查s2是否为新字符串的子串
    else:
        return is_substring(s1, s2 + s2)

4.压缩字符串

挑战介绍
        实现一个算法来压缩一个字符串。压缩的要求如下:
        需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
        压缩的格式是将连续相同字符替换为字符+数字形式,例如 "AAABCCDDDD" 变为         "A3BC2D4"。
挑战内容
        本次挑战中,你需要在 compress_str.py 文件中补充函数 compress 的空缺部分。
        compress 函数接受一个参数,string 用于指定传入的字符串;
        compress 函数输出一个字符串。
你需要补充 compress 函数,使 compress 函数可以对传入的 string 字符串进行压缩。要求如下:
        判断传入的字符串是否需要进行压缩,如果不需要压缩,返回原字符串;
        如果需要压缩,返回压缩后的字符串;
        如果传入的字符串是 None 或者空字符串,返回 None 或者空字符串。


请自己先独立思考,然后再查看代码哦!

代码如下:

class CompressString(object):
    def compress(self, string):
        if string is None or not string:  # 字符串为空或者不存在
            return string
        result = []  # 创建一个空列表存储
        prev_char = string[0]  # 设置起点
        count = 0  # 计数器,用于记住每个字符的数量
        for char in string:  # 遍历字符串
            if char == prev_char:  # 出现了相同的字符
                count += 1
            else:
                result += self._calc_partial_result(prev_char, count)
                prev_char = char
                count = 1
        result += self._calc_partial_result(prev_char, count)
        return result if len(result) < len(string) else string

    def _calc_partial_result(self, prev_char, count):
        return prev_char + (str(count) if count > 1 else '')
  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值