用python编写算法程序_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 # 拼接字符成“子串”

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)

< 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

= 1for

fac in range(2,

num):if

num % fac == 0:flag

= 0breakif

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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值