天天看点

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

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

by:授客 QQ:1033553122 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

拼接字符成“子串”

index ==

len(str_list)-1:

当字符为最后一个字符时,需要再拼接一次,否则直接退出循环了

temp_sub_str = temp_sub_str + second

str_list_final.append(temp_sub_str)

存储最后一个连续的“子串”

else:

依旧要把前一个字符拼接起来(因为它属于连续“子串”中的最后一个字符

str_list_final.append(temp_sub_str)

str_list_final.append(second)

''

置空,开始找下一个连续的“子串”

second =

max_lenth_str =

存储单个长度最大的字符子串

max_lenth_str_list

= []

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

#print(str_list_final)

sub_str

str_list_final[:]:

second = sub_str

len(first)

<</span>

len(second):

max_lenth_str = second

max_lenth_str_list=[]

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

max_lenth_str_list.append(max_lenth_str)

elif

== 

len(second)

!=

0:

前一个子串和后一个子串相等

     max_lenth_str_list.append(second) 

#保持之前存的不变,再拼接一个等长度的子串

>

len(second): 

#前一个子串比后一个子串的长度长

len(max_lenth_str):

需要判断前一个子串是否比上一次存储的最大子串的长度长

前一个比上次的长,清空之前拼接的

         max_lenth_str

= first

second = max_lenth_str

print(set(max_lenth_str_list))

转set,去掉重复的

__name__ ==

'__main__':

findstr("a")

findstr("abcdef")

findstr("abcdeeeeffff")

findstr("aabbcdddeeeffffs")

findstr("a1abbcddddeeeffffs")

运行结果:

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

更高效的做法:

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]

if len(temp_str) > 1:

result_list.append(temp_str)

temp_str = ''

    result_dic =

{}

    for item in

result_list:

result_dic[item] = len(item)

= 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

range(1,

16):

        flag

=

1

        for

fac

range(2,

num):

            if

num % fac ==

                flag

                break

        if

flag ==

1:

            print('%d是质数'

% num)

运行结果:


        
Python 基于python编写一些算法程序等
题目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],

N = 3 # 前3个数

for i in range(0, N):

print(result_list[i][0])

作者:授客

QQ:1033553122

全国软件测试QQ交流群:7156436

Git地址:https://gitee.com/ishouke

友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!

作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!

           微信打赏                       

支付宝打赏                  全国软件测试交流QQ群  

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