zoukankan      html  css  js  c++  java
  • Python 基于python编写一些算法程序等

    基于python编写一些算法程序等

    by:授客 QQ1033553122 QQ群:7156436

    没特意去研究,只是这对群友在QQ群里(7156436)提出的一些小程序实现、编程题,算法、问题等,本着学习的心态,根据自己的想法帮忙去编写实现而已。

    题目1:在一串字符串中找出由连续相同字符组成的最长的子字符串,比如输入aabcd,输出aa,输入ab,输出ab,输入abbbbeee,输出bbb,eee,输入aabbbbee,输出bbb

    代码实现如下:

    #!/usr/bin/env python

    # -*- coding:utf-8 -*-

    __author__ = 'shouke'

     

     

    def findstr(str_obj):

        str_list_final = [] # 存储找到的字符子串

     

        second=''

        temp_sub_str = ''

     

        str_list = list(str_obj) # 把字符串转为列表

        for index,element in enumerate(str_list[:]):  # 遍历查找连续的子串,包含只有一个字符的字符串

            first = second

            second = element

            if first ==  second and first != '': # 如果前一个字符串后一个字符不相等

                temp_sub_str = temp_sub_str + first # 拼接字符成子串

     

                if index == len(str_list)-1: # 当字符为最后一个字符时,需要再拼接一次,否则直接退出循环了

                    temp_sub_str = temp_sub_str + second

                    str_list_final.append(temp_sub_str) # 存储最后一个连续的子串

            else: # 如果前一个字符串后一个字符不相等

               temp_sub_str = temp_sub_str + first # 依旧要把前一个字符拼接起来(因为它属于连续子串中的最后一个字符

               str_list_final.append(temp_sub_str)

               if index == len(str_list)-1:

                   str_list_final.append(second)

               temp_sub_str = '' # 置空,开始找下一个连续的子串

     

        second = ''

        max_lenth_str = '' # 存储单个长度最大的字符子串

        max_lenth_str_list = [] # 子串可能有多个,可能重复,用list存储,方便后续转为set,去重复

        #print(str_list_final)

        for sub_str in str_list_final[:]:

            first = second

            second = sub_str

            if len(first) <</span> len(second):

                max_lenth_str = second

                max_lenth_str_list=[] # 前一个子串比后一个子串的长度短,把之前存储的全部清空,准备接收刚找到的最长子串

                max_lenth_str_list.append(max_lenth_str)

            elif len(first) ==  len(second) and len(first) != 0: # 前一个子串和后一个子串相等

                max_lenth_str = second

                max_lenth_str_list.append(second)  #保持之前存的不变,再拼接一个等长度的子串

            elif len(first) > len(second):  #前一个子串比后一个子串的长度长

                if len(first) > len(max_lenth_str): # 需要判断前一个子串是否比上一次存储的最大子串的长度长

                    max_lenth_str_list=[] # 前一个比上次的长,清空之前拼接的

                max_lenth_str = first

                second = max_lenth_str

     

        print(set(max_lenth_str_list)) # set,去掉重复的

     

    if __name__ == '__main__':

        findstr("a")

        findstr("abcdef")

        findstr("abcdeeeeffff")

        findstr("aabbcdddeeeffffs")

        findstr("a1abbcddddeeeffffs")

    运行结果:

    更高效的做法:

    def look_substring_for_maxlength(string):
        temp_str = string[0]
        result_list = []
        for i in range(0, len(string)):
            if i
                temp_str = temp_str + string[i]
            else:
                temp_str = temp_str + string[i]
                if len(temp_str) > 1:
                    result_list.append(temp_str)
                temp_str = ''

        result_dic = {}
        for item in result_list:
            result_dic[item] = len(item)

        result_list = sorted(result_dic.items(), key=lambda item:item[1], reverse=True)
        return result_list[0][0]


    print(look_substring_for_maxlength('a1abbcddddeeeffffs'))


    题目2:查找整数1到15内的素数
    注:素数,只能被1和自己整除的整数

    代码实现如下:

    #!/usr/bin/env python
    
    # -*- coding:utf-8 -*-
    
    __author__ = 'shouke'
    

    if __name__ == '__main__':
        for num in range(1, 16):
            flag = 1
            for fac in range(2, num):
                if num % fac == 0:
                    flag = 0
                    break
            if flag == 1:
                print('%d是质数' % num)


    运行结果:

    题目
    3:给定一个只包含正整数而且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序排列,N不存在取值非法的情况) 用最熟悉的语言或者伪代码实现该需求
    代码1:

    array = [2,4,2,4,4,5,5,5,5,6,2,6, 8, 8]

    array_set = set(array) # 转list为集合

    result_dict = {} # 存储数组中对应数字及数字数现次数

    for item in array_set:
        result_dict[str(item)] = array.count(item)

    result_list = sorted(result_dict.items(), key=lambda item:item[1], reverse=True)

    N = 3 # 前3个数
    for i in range(0, N):
        print(result_list[i][0])

    
    
  • 相关阅读:
    文献收录船舶建造的现代工程分解结构
    FLEX MDI窗口开发实例(2)
    收录国外造船信息Pursuit of a product work breakdown structure (PWBS)
    FLEX MDI窗口开发实例
    买了本<<flash actionscript 3.0殿堂之路>>
    今天我捐款了
    记Lambda的一个使用方法
    JXMS 低代码开发平台
    我的博客也Sliverlight
    代码编辑插件使用
  • 原文地址:https://www.cnblogs.com/shouke/p/10157693.html
Copyright © 2011-2022 走看看