最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python亂序字符串排序的實(shí)現(xiàn)方式

 更新時(shí)間:2022年11月01日 17:01:47   作者:夢(mèng)入玄機(jī)  
這篇文章主要介紹了python亂序字符串排序的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python亂序字符串排序

什么是亂序字符串排序

亂序字符串排序是指一個(gè)字符串是另一個(gè)字符串的亂序排序,比如apple就是eppal的亂序字符串。

檢查

假設(shè)字符串由26個(gè)小寫字符串組成。

1、時(shí)間復(fù)雜度O(n^2)

解決方案:

判斷兩個(gè)字符串長度是否相等,若不相等返回False,不相等則判斷第一個(gè)字符串的字符是否在第二個(gè)字符串中,如果不在,返回False,如果在則把第二個(gè)字符串中查找的位置元素置為None,因?yàn)橐淖兊诙€(gè)字符串,需把第二個(gè)字符串轉(zhuǎn)換為list,代碼如下:

def none_sort_str(s1, s2):
? ? s2_list = list(s2)
? ? if len(s1) != len(s2):
? ? ? ? return False
? ? else:
? ? ? ? for i in range(len(s1)):
? ? ? ? ? ? for j in range(len(s2_list)):
? ? ? ? ? ? ? ? if s1[i] in s2_list:
? ? ? ? ? ? ? ? ? ? s2_list[s2_list.index(s1[i])] = None
? ? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? return False
? ? return True

2、時(shí)間復(fù)雜度O(n)

解決方案:

判斷兩個(gè)字符串長度是否相等,若不相等返回False,使用計(jì)數(shù)方式,代碼如下:

def none_sort_str2(s1, s2):
? ? a = [0] * 26
? ? b = [0] * 26
? ? for i in range(len(s1)):
? ? ? ? index1 = ord(s1[i]) - ord('a')
? ? ? ? a[index1] += 1
? ? for i in range(len(s2)):
? ? ? ? index2 = ord(s2[i]) - ord('a')
? ? ? ? b[index2] += 1
? ? if a == b:
? ? ? ? return True
? ? else:
? ? ? ? return False

亂序字符串檢查算法研究 

顯示不同量級(jí)的算法的一個(gè)很好的例子是字符串的亂序檢查。亂序字符串是指一個(gè)字符串只是另一個(gè)字符串的重新排列。

例如,'heart' 和 'earth' 就是亂序字符串。'python' 和 'typhon' 也是。為了簡單起見,我們假設(shè)所討論的兩個(gè)字符串具有相等的長度,并且他們由 26 個(gè)小寫字母集合組成。我們的目標(biāo)是寫一個(gè)布爾函數(shù),它將兩個(gè)字符串做參數(shù)并返回它們是不是亂序。

解法一

思路:將兩個(gè)字符串都轉(zhuǎn)化成列表,然后遍歷其中一個(gè),當(dāng)前元素在另外一個(gè)列表中就把另一個(gè)列表的對(duì)應(yīng)元素移除(防止重復(fù)干擾)。不存在就返回FALSE,遍歷完成返回True

代碼參考如下:

str1 = 'hagjen'
str2 = 'ahejng'
def foo(str1,str2):
? ? ls1 = list(str1)
? ? ls2 = list(str2)
? ? for i in ls1:
? ? ? ? if i in ls2:
? ? ? ? ? ? ls2.remove(i)
? ? ? ? else:return False
? ? return True
print(foo(str1,str2))

算法復(fù)雜度:兩層for循環(huán),都是和n線性相關(guān),所以這個(gè)算法復(fù)雜度為 O(n^2 )。

解法二

兩個(gè)字符串也都轉(zhuǎn)為列表,然后排序當(dāng)排序后連個(gè)列表相等就返回True,否則FALSE

str1 = 'hagjen'
str2 = 'ahejng'
def foo(str1,str2):
? ? ls1 = list(str1).sort()
? ? ls2 = list(str2) .sort()
? ? return True if ls1==ls2 else False
print(foo(str1,str2))

算法復(fù)雜度:咋一看完全沒有循環(huán),復(fù)雜度好像非常低,但是別忘了排序!排序是python內(nèi)部實(shí)現(xiàn)的,它也需要時(shí)間消耗,排序的算法復(fù)雜度一般是O(nlog(n)),O(n^2)。所以這種方法不一定比上面的好

解法三

建立兩個(gè)長度為26的列表,分別遍歷兩個(gè)字符串,分別計(jì)數(shù),最后兩個(gè)列表相同就返回True

def foo(s1,s2):
? ? ls1 = list(s1)
? ? ls2 = list(s2)
? ? count1 = [0 for ?i in range(26)]
? ? count2 = [0 for ?i in range(26)]
? ? print(count1)
? ? print(count2)
? ? for ?i in ls1:
? ? ? ? count1[ord(i)-ord('a')] +=1
? ? for ?i in ls2:
? ? ? ? count2[ord(i)-ord('a')] +=1
? ? return True if count1==count2 else False
print(foo('aacf','cfaa'))

時(shí)間復(fù)雜度:由于沒有循環(huán)嵌套也沒有排序等算法,時(shí)間復(fù)雜度為2n+26,即O(n)

代碼優(yōu)化:

def is_simlar(s1, s2):
? ? from collections import Counter
? ? return Counter(s1) == Counter(s2)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。  

相關(guān)文章

  • 初步解析Python下的多進(jìn)程編程

    初步解析Python下的多進(jìn)程編程

    這篇文章主要介紹了初步解析Python下的多進(jìn)程編程,使用多進(jìn)程編程一直是Python編程當(dāng)中的重點(diǎn)和難點(diǎn),需要的朋友可以參考下
    2015-04-04
  • 使用Python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為SVG格式

    使用Python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為SVG格式

    SVG(Scalable Vector Graphics)是一種基于XML的矢量圖像格式,這種格式在Web開發(fā)和其他圖形應(yīng)用中非常流行,提供了一種高效的方式來呈現(xiàn)復(fù)雜的矢量圖形,本文將介紹如何使用Python轉(zhuǎn)換Excel文件為SVG格式,需要的朋友可以參考下
    2024-07-07
  • Django中的Model操作表的實(shí)現(xiàn)

    Django中的Model操作表的實(shí)現(xiàn)

    這篇文章主要介紹了Django中的Model操作表的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python使用matplotlib實(shí)現(xiàn)的圖像讀取、切割裁剪功能示例

    Python使用matplotlib實(shí)現(xiàn)的圖像讀取、切割裁剪功能示例

    這篇文章主要介紹了Python使用matplotlib實(shí)現(xiàn)的圖像讀取、切割裁剪功能,結(jié)合實(shí)例形式分析了Python基于matplotlib操作圖片的加載、讀取、坐標(biāo)控制及裁剪相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python發(fā)送郵件測試報(bào)告操作實(shí)例詳解

    Python發(fā)送郵件測試報(bào)告操作實(shí)例詳解

    這篇文章主要介紹了Python發(fā)送郵件測試報(bào)告操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python郵件發(fā)送相關(guān)模塊使用及操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • python實(shí)現(xiàn)KNN近鄰算法

    python實(shí)現(xiàn)KNN近鄰算法

    這篇文章主要介紹了python實(shí)現(xiàn)KNN近鄰算法的方法,幫助大家更好的利用python進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下
    2020-12-12
  • 基于Python實(shí)現(xiàn)PDF轉(zhuǎn)換文件格式

    基于Python實(shí)現(xiàn)PDF轉(zhuǎn)換文件格式

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)PDF轉(zhuǎn)換文件格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • 在Python的Django框架中為代碼添加注釋的方法

    在Python的Django框架中為代碼添加注釋的方法

    這篇文章主要介紹了在Python的Django框架中為代碼添加注釋的方法,需要的朋友可以參考下
    2015-07-07
  • python生成式的send()方法(詳解)

    python生成式的send()方法(詳解)

    下面小編就為 大家?guī)硪黄猵ython生成式的send()方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Django User 模塊之 AbstractUser 擴(kuò)展詳解

    Django User 模塊之 AbstractUser 擴(kuò)展詳解

    這篇文章主要介紹了Django User 模塊之 AbstractUser 擴(kuò)展詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評(píng)論

濮阳县| 渝北区| 乌拉特前旗| 丰顺县| 凤翔县| 万山特区| 理塘县| 岳池县| 炎陵县| 南陵县| 合作市| 崇左市| 澳门| 肇源县| 叙永县| 沙湾县| 象州县| 大关县| 那曲县| 东方市| 南雄市| 荣成市| 佛冈县| 昭苏县| 枣强县| 安康市| 资源县| 乐山市| 宁德市| 隆尧县| 苍梧县| 馆陶县| 正宁县| 盐源县| 光泽县| 瑞安市| 友谊县| 仁布县| 沧州市| 罗源县| 崇左市|