'abbdsjjtb',找出该字符串中最后一个只出现一次的字符,并且得到这个字符的位置

# !/usr/bin python3                                 
# encoding: utf-8 -*-                            

# 作业1:'abbdsjjtb',找出该字符串中最后一个只出现一次的字符,并且得到这个字符的位置
# 分析:
# 两个关键点:只出现一次  最后一个
# 列表里有一个count方法可以统计列表元素出现的次数,题目给的是一个字符串,那么如何将字符串转成列表?
# 需要统计每一个字符,那么意味着需要遍历上述转换后的列表
# 遍历时找到每个字符对应的次数,判断为1的进行收集,使用列表
#
# s = 'abbdsjjtb'
# s_list=list(s)
# only_one_list = [] # 这个列表是用来存放只出现一次的元素的,那么他的最后一个元素就是目标
# for char in s_list:#char就表示的是每一个字符
#     count = s_list.count(char)
#     if count==1:
#         # print(char)
#         only_one_list.append(char)
# last_char = only_one_list[-1]
# print(last_char)
# # 最后得到位置
# print(s.find(last_char))

"""
1. 封装一个函数,传递任意的字符串,统计该字符串所有的子串出现的次数,并降序输出
这个函数所做的事情,就是找出入参当中所有包含的子串
(例如:abcdcccabcc是入参,bcd、bc都是子串,ac不是,包含关系,最少2个字符),
并统计每一种子串在入参当中出现的次数,降序输出,例如ab出现了2次。
"""
"""
分析:
关键点:找所有子串   统计次数   降序输出
找所有子串:abcdcccabcc
第一次: ab abc abcd abcdc abcdcc abcdccc abcdccca abcdcccab abcdcccabc abcdcccabcc
第二次: bc bcd bcdc bcdcc bcdccc bcdccca bcdcccab bcdcccabc bcdcccabcc
第三次: cd cdc cdcc cdccc cdccca cdcccab cdcccabc cdcccabcc
规律: 每个字符作为开始一直找到最后,两层for循环使用字符串切片得到所有子串
统计次数: 列表里有一个count函数可以统计每一个元素出现的次数,将上述得到的所有子串存入列表
降序输出: 由于要排序,因此每一个子串和他的次数应该具备对应关系ab:1 abc:4 abcd:5
        什么样的类型可以存储这种对应关系数据?字典
        遍历子串对应的列表,统计每一个子串的次数,并且将子串作为key,次数作为value进行存储
        按照每个子串出现的次数降序输出
"""

def find_sub_str_order(s):
    # s = 'abcdcccabcc'
    length = len(s)
    sub_str_list = []
    for i in range(length):
        # s[0:2]
        # s[0:3]
        # s[0:4]
        # s[0:5]
        # s[0:12]
        for j in range(i + 2, length + 1):
            sub_str = s[i:j]
            sub_str_list.append(sub_str)
    sub_str_dict = {}
    for sub_str in sub_str_list:
        count = sub_str_list.count(sub_str)
        sub_str_dict[sub_str] = count
    print(sub_str_dict)
    # sub_str_dict.items() 字典的每一个item是一个元组('abc', 2)
    # lambda 冒号之前是入参,在这里参数就是每一个item元组kv=('abc', 2)
    # lambda 冒号之后是返回值,因为我们要按照次数进行排序,次数在每一个item元组里属于第2个元素,所以是kv[1]
    print(sorted(sub_str_dict.items(), key=lambda kv: kv[1], reverse=True))
if __name__ == '__main__':
    find_sub_str_order('ryyrererdff')
    # s='sdjaffdh'
    # print(s[2:-3])

 

 

posted @ 2022-03-12 14:48  测试艺术家  阅读(347)  评论(0编辑  收藏  举报