Python 岗位笔面必刷题一

目录

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

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

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

4.压缩字符串

5.反转字符串中的字符

6.找到给定字符串中的不同字符

7.查找两个总和为特定值的索引

8.Fizz Buzz 经典问题

本文所有代码中 函数部分在调用中可去掉self参数,不影响结果。

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

题目:

实现一个算法来识别一个字符串的每个字符是否是唯一的。

要求:

如果传入字符串的字符是唯一的,则返回 True

如果传入字符串的字符是有重复的,则返回 False

如果传入的字符串为 None,也返回 False

def has_unique_chars(self, string):

        if string is None:
            return False
        s=set(string)
        if len(s)==len(string):
            return True
        else:
            return False

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

题目:

实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列 

要求:

如果 str2 字符串是 str1 字符串的排列,则返回 True

如果 str2 字符串不是 str1 字符串的排列,则返回 False

如果传入的字符串有 None,或者有空字符串,则返回 False

def is_permutation(self, str1, str2):

        if str1 is None or str2 is None or str1=='' or str2=='':
            return False
        if len(str1)!=len(str2):
            return False
        return sorted(str1)==sorted(str2)

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

题目:

实现一个算法来识别一个字符串 s2 是否是另一个字符串 s1 的旋转。旋转的解释如下:如果将 s1 从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到 s2 ,那么说字符串 s2 是字符串 s1 的旋转

要求:

如果 s2 字符串是 s1 字符串的旋转,则返回 True

如果 s2 字符串不是 s1 字符串的旋转,则返回 False

如果传入的字符串有一个是 None 或者空字符,但另外一个不是时,也返回 False

def is_substring(self, s1, s2):

         return s1 in s2
    def is_rotation(self, s1, s2):
        if s1==None or s2==None:
            return False
        if len(s1)!=len(s2):
            return False
        return self.is_substring(s1,s2+s2)

4.压缩字符串

题目:

实现一个算法来压缩一个字符串。压缩的要求如下:

需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。

压缩的格式是将连续相同字符替换为字符+数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"

要求:

判断传入的字符串是否需要进行压缩,如果不需要压缩,返回原字符串;

如果需要压缩,返回压缩后的字符串;

如果传入的字符串是 None 或者空字符串,返回 None 或者空字符串。

 def compress(self, string):
       
        if string is None or len(string) == 0:
            return string    
        c = 1
        s = string[0]
        for i in range(1, len(string)):

            if string[i] == string[i - 1]:
                c += 1
            else:
                if c > 1:
                    s += str(c)
                s += string[i]
                c = 1
            if i == len(string) - 1 and c>1:
                s += str(c)
        if len(s)<len(string):
            return s
        else:
            return string

5.反转字符串中的字符

题目:

将字符数组的字符进行反转,例如 ['b', ' ', 'a', 'r'] 变成 ['r', 'a', ' ', 'b']

要求:

将字符数组替换为反转后的数组。

不使用Python 自带函数reverse()

def reverse(self, chars):
        if chars:
            size = len(chars)
            for i in range(size // 2):
                chars[i], chars[size - 1 - i] = \
                    chars[size - 1 - i], chars[i]
        return chars

6.找到给定字符串中的不同字符

题目:

在不考虑字符排列的条件下,对于相差只有一个字符的两个字符串,实现一个算法来识别相差的那个字符。要求如下:当传入的字符串为 'aad' 和 'ad' 时,结果为 'a'

要求:

当传入的字符串为 'aaabccdd' 和 'abdcacade' 时,结果为 'e'对于传入的两个字符串,返回它们之间相差的那个字符;

如果传入的字符串有 None ,需要使用 raise 语句显示 TypeError

def find_diff(self, str1, str2):
        if str1 is None or str2 is None:
            raise TypeError('输出不能为空')
        ch1=0
        ch2=0
        for char in str1:
            ch1+=ord(char)
        for char in str2:
            ch2+=ord(char)
        return chr(abs(ch1-ch2))

7.查找两个总和为特定值的索引

题目:

给定一个数组,找到两个总和为特定值的索引。

例如给定数组 [1, 2, 3, -2, 5, 7],给定总和 7,则返回索引 [1, 4]

对于传入的数组 nums,返回总和为 val 的两个值的索引

要求:

如果数组中没有和为目标值的元素,则返回 None

如果传入的数组 nums 或者目标值 val 为 None,需要使用 raise 语句显示 TypeError

如果传入的数组为空数组,需要使用 raise 语句显示 ValueError

def two_sum(self, nums, val):
        if nums is None or val is None:
            raise TypeError
        elif len(nums)==0:
            raise ValueError
        else:
            for i in range(len(nums)):
                for j in range(len(nums)):
                    if i!=j and nums[i]+nums[j]==val:
                        return [i,j]
        return None

8.Fizz Buzz 经典问题

题目:

给定一个整数 num,从 1 到 num 按照下面的规则返回每个数:

如果这个数被 3 整除,返回 'Fizz'

如果这个数被5 整除,返回 'Buzz'

如果这个数能同时被 3 和 5 整除,返回 'FizzBuzz'

如果这个数既不能被 3 也不能被 5 整除,返回这个数字的字符串格式

要求:

对于传入的整数 num,返回长度为 num 的数组,数组的每个值由 Fizz Buzz 的规则构成;

如果传入的数为 None,需要使用 raise 语句显示 TypeError

如果传入的整数小于 1,需要使用 raise 语句显示 ValueError

def fizz_buzz(self, num):
        if num is None:
            raise TypeError
        elif num<1:
            raise ValueError
        else:
            cd=[]
            for i in range(1,num+1):
                if i%15==0:
                    cd.append('FizzBuzz')
                elif i%5==0:
                    cd.append('Buzz')
                elif i%3==0:
                    cd.append('Fizz')
                else:
                    cd.append(str(i))
        return cd

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值