zoukankan      html  css  js  c++  java
  • Python中常见的字符串小笔试题

    1.获取实现两个字符串中最大的公共子串

    思路:

        1.比较两个字符串的长度

      2.获取较短字符串的所有子串

      3.使用__contains__函数进行比较

      4.把子串当做键,子串长度作为值,存入字典,通过值,反过来取出所有这个长度的值,做到同样长度下多个值得情况

    # coding=utf-8
    str1 = "abcdef"
    str2 = "efdrabcefghdef"
    max_str = ""
    min_str = ""
    list1 = []
    
    def list_str(max_str, min_str):  # 2.获取较短字符串的所有子串
        count = 0
        n= len(min_str)
        while count < n:
            for i in range(n):
                list1.append(min_str[count:i + 1])
            count += 1
    
    
    # 3.判断较长字符串是否含有子串
    def end():
        dict1 = {}
        for i in list1:
            if max_str.__contains__(i):
                dict1[i] = len(i) # 把值当做键,把长度作为值
        value1= max(dict1.values())
        for key,value in dict1.items(): # 通过遍历,找到所有这个长度的值
            if value== value1:
                print(key)
    
    # 1.首先判断两字符串长度
    def start(str1, str2):
        global max_str, min_str
        max_str, min_str = str1, str2
        if len(max_str) < len(min_str):
            max_str, min_str = str2, str1
            list_str(max_str, min_str)  # 2.获取子串
        list_str(max_str, min_str)
        end()  # 3,判断
    
    
    if __name__ == '__main__':
        start(str1, str2)  # 0.开始比较长度

    2.给定几个字符串,输入一个字符,如果第一个字符相同,再输入第二个,同样情况,继续输入,直到找到唯一的字符串

      思路

      1.把给出的字符串放入一个列表中

      2.输入字符,遍历列表,使用startswith()方法

      3.将比较的结果进行判断

      4.回调

    # coding=utf-8
    
    list1 = []
    str1 = "Mon"
    str2 = "Mabc"
    str3 = "Mongddd"
    list1.append(str1)
    list1.append(str2)
    list1.append(str3)
    last = ""  # 存储最后要输出的字符串
    count = 0  # 用来标识是否有以输入字符开头的字符串
    str_input = ""  # 存储输入的字符串
    
    
    def compare(input_str):
        global count, last
        count = 0
        for i in list1:
            if i.startswith(input_str):
                count += 1
                last = i
    
    
    def back():
        global str_input
        if count == 1:  # 如果是1,说明只有1个字符串有,则输出
            print(last)
        elif count >= 2:  # 如果没有,则继续输入,并且拼接上前面输入的字符串
            input_str = input("请继续输入字母")
            str_input = str_input + input_str
            compare(str_input)  # 重新调用比较
            back() #回调本身,进行验证
    
    
    if __name__ == '__main__':
        input_str = input("输入一个字母")
        str_input = input_str
        input_str = 'M'
        compare(input_str)  # 调用比较是否有哪个字符串以这个字符开头
        back()

    3.给定一个字符串,根据字符出现的频度排序,例如"abcc",排序后的结果为"ccba"或者"ccab"

      思路

      1.把所有字符串转换成列表

      2.使用max(set(list1),key=list1.count)方法求出列表中出现频度最大的字符串

      3.请求出现的次数,并在列表中移除这个元素

      4.根据列表的长度进行回调

    # coding=utf-8
    str1 = "abcc"
    list1 = list(str1)
    last_str = ""  # 最终输出的字符串
    
    
    def max_count_str(list_temp):  # 判断出现频度最大的字符串
        return max(set(list_temp), key=list_temp.count)
    
    
    def count_judge(str_temp):  # 请求出现的频度,并在列表中去除这个元素
        count = 0
        while True:
            if str_temp in list1:
                list1.remove(str_temp)
                count += 1
            else:
                break
        return count
    
    
    def start():
        global last_str
        str_temp = max_count_str(list1)  # 请出出现频度最大的字符
        count = count_judge(str_temp)  # 请求出现的频度,并在列表中去除这个元素
        last_str = last_str + str_temp * count  # 进行字符串拼接
        if len(list1) > 0:
            start()  # 如果列表中还有元素,回调,继续比较
    
    
    if __name__ == '__main__':
        start()
        print(last_str)
  • 相关阅读:
    Oracle Core 学习笔记二 Transactions 和 Consistency 说明
    Oracle AUTO_SPACE_ADVISOR_JOB 说明
    Windows 下 ftp 上传文件 脚本
    Oracle 11g 中 Direct path reads 特性 说明
    Linux 使用 wget 下载 Oracle 软件说明
    Oracle 10g read by other session 等待 说明
    Oracle 11g RAC INS06006 Passwordless SSH connectivity not set up between the following node(s) 解决方法
    SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
    Oracle RAC root.sh 报错 Timed out waiting for the CRS stack to start 解决方法
    Oracle RESETLOGS 和 NORESETLOGS 区别说明
  • 原文地址:https://www.cnblogs.com/greatfish/p/6044950.html
Copyright © 2011-2022 走看看