中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python亂序字符串排序如何實現

發布時間:2022-11-03 10:23:13 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“python亂序字符串排序如何實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python亂序字符串排序如何實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

python亂序字符串排序

什么是亂序字符串排序

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

檢查

假設字符串由26個小寫字符串組成。

1、時間復雜度O(n^2)

解決方案:

判斷兩個字符串長度是否相等,若不相等返回False,不相等則判斷第一個字符串的字符是否在第二個字符串中,如果不在,返回False,如果在則把第二個字符串中查找的位置元素置為None,因為要改變第二個字符串,需把第二個字符串轉換為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、時間復雜度O(n)

解決方案:

判斷兩個字符串長度是否相等,若不相等返回False,使用計數方式,代碼如下:

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

亂序字符串檢查算法研究 

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

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

解法一

思路:將兩個字符串都轉化成列表,然后遍歷其中一個,當前元素在另外一個列表中就把另一個列表的對應元素移除(防止重復干擾)。不存在就返回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))

算法復雜度:兩層for循環,都是和n線性相關,所以這個算法復雜度為 O(n^2 )。

解法二

兩個字符串也都轉為列表,然后排序當排序后連個列表相等就返回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))

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

解法三

建立兩個長度為26的列表,分別遍歷兩個字符串,分別計數,最后兩個列表相同就返回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'))

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

代碼優化:

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

讀到這里,這篇“python亂序字符串排序如何實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德格县| 名山县| 张家港市| 林甸县| 许昌县| 南充市| 永宁县| 毕节市| 五莲县| 林西县| 景泰县| 金昌市| 和静县| 柞水县| 江阴市| 榆林市| 绍兴县| 西吉县| 东城区| 五指山市| 绥棱县| 贵溪市| 左贡县| 永年县| 西城区| 科尔| 万山特区| 叶城县| 分宜县| 武城县| 永修县| 巴里| 安化县| 六枝特区| 南阳市| 祁连县| 彭阳县| 溆浦县| 吉水县| 台北市| 巴林左旗|