基于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")
運作結果:

更高效的做法:
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群