没特意去研究,只是这对群友在QQ群里(644956177)提出的一些小程序实现、编程题,算法、问题等,本着学习的心态,根据自己的想法帮忙去编写实现而已。
题目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])
最后:【可能给予你一定的帮助】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
关注我的微信公众号【软件测试小dao】免费获取~
我的学习交流:644956177 群里有技术大牛一起交流分享~
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!