字符串的常考题型

最近在做一些python练习题,所以,趁此机会,把字符串的常考题目,以及常用方法做一个梳理

题目一:统计各个字母,数字,空格,以及其他特殊字符出现的次数  s = "1qe89cty  dgh4ue54 w637  ud   !@#"

题目二:任意给出一串字符串,找出该字符中每一个字符出现的次数  s1 = "aabbbccccddddddd"

题目三:统计每种字符出现的次数,同样用字典表示出来     s2 = “aaa123444yyy32222222”

题目四:回文数:从左到右,从右到左都是一样的,就是回文数,12321是回文数,12345不是

先看看最后的输出结果

字符串的常考题型

 且看下列的代码分析过程

"""
题目一:统计各个字母,数字,空格,以及其他特殊字符出现的次数
"""
s = "1qe89cty  dgh4ue54 w637  ud   !@#"

# 先初始化,定义变量为0,从0开始统计
int_count = 0
str_count = 0
space_count = 0
other_count = 0

# 开始对字符串进行遍历
for i in s:
    if i.isdigit():
        int_count += 1
    elif i.isalpha():
        str_count += 1
    elif i == " ":
        space_count += 1
    else:
        other_count += 1
print("数字有{}个;字母有{}个;空格有{}个;其他特殊字符有{}个".format(int_count, str_count, space_count, other_count))
# 最后打印结果如下    数字有9个;字母有13个;空格有8个;其他特殊字符有3个

"""
题目二:任意给出一串字符串,找出该字符出现的次数
比如:s1 = "aabbbccccddddddd"   ;这道题可以采用count方法更简单
"""

s1 = "aabbbccccddddddd"
# 定义一个空字典,用来装结果
dict_s1 = {}
# 开始遍历
for i in s1:
    dict_s1[i] = s1.count(i)
print(dict_s1)  # 最后打印结果:{'a': 2, 'b': 3, 'c': 4, 'd': 7}

### 其实这道题可以改编一下,把以上两道题综合起来,给出任意字符串  s2 = “aaa123444yyy32222222”;统计每种字符出现的次数,同样用字典表示出来

s2 = "aaa123444yyy3222mn2222"
# 同样的拿一个空字典来装
dict_s2 = {}
# 开始遍历
for j in s2:
    # 从左到右走第一轮,如果是第一次出现,就直接放进去
    if j not in dict_s2:
        dict_s2[j] = 1
    # 如果是第二次出现,就说明开始装的字典里面已经有一个和这个重复,那就同样的继续加1
    else:
        dict_s2[j] += 1
print(dict_s2)  # 最后打印结果:{'a': 3, '1': 1, '2': 8, '3': 2, '4': 3, 'y': 3, 'm': 1, 'n': 1}

# 其实,第三题的方法同样适用于第二题,也可以做到

"""
题目四,回文数
"""


def number(num2):
    # 先把这个数字转化为字符串,再转化为列表
    li1 = list(str(num2))
    # 转化为列表后,再将列表反转
    li2 = li1[::-1]
    # 再将列表中的元素,当作字符,一个一个拼接起来,再把字符串类型强制转化成整数类型
    # 定义一个空的字符串,专门用来开始拼接的
    str_1 = ''
    r = int(str_1.join(li2))
    # 将最后转化的数字与最开始的num2进行比较,如果相等,就是回文数,如果不相等,就不是
    if r == num2:
        return True
    else:
        return False


# 因为最后返回的是布尔类型,所以,得打印出来才知道是True还是False
print(number(12321))    # 打印结果为 True
print(number(12345))    # 打印结果为 False

  从以上几个题目中,我们大概捋一下思路;第一题,它只是用来判断哪些是数字,哪些是字母,哪些是空格,哪些是特殊字符,所以,这里需要用到的两个方法,isdigit()和isalpha();其中,isdigit()是用来判断是否为数字,isalpha()用来判断是否为字母,这个是每一个下标元素本来自带的方法,要学会合理的运用起来;第二题和第三题,基本上是同一个题,但是,第二题运用的是count()计数方法,第三题用的是if判断,虽然也是count++,但是感觉第三题的方法适用更广。第四题,涉及到的知识点就是,数据类型之间的强制转换,join()拼接方法。以上题目具有代表性,较为经典,建议多多练手,总结解题的规律。

 

上一篇:【LeetCode-SQL】601. 体育馆的人流量


下一篇:leetcode之哈希表九: 判定是否互为字符重排