天天看點

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編寫一些算法程式等