變位詞判斷 python

2021-10-03 07:06:45 字數 2653 閱讀 2970

《python資料結構與演算法分析》(第二版)

寫乙個bool函式,以兩個詞為引數,返回這兩個詞是否為變位詞。(假設參與判斷的兩個詞僅由小寫字母組成,且長度相等如:abcd和cdab)

# !/user/bin/env python

# coding:utf-8

#方案1:清點法(時間複雜度為平方)

defanagramsolution1

(s1, s2)

: alist =

list

(s2)

#把s2複製到列表中,以便查詢時做修改

pos1 =

0 stillok =

true

while pos1 <

len(s1)

and stillok:

#逐個取出s1中字母

pos2 =

0 fit =

false

while pos2 <

len(alist)

andnot fit:

#與s2進行逐個對比

if s1[pos1]

== alist[pos2]

: fit =

true

#找到else

: pos2 = pos2 +

1#未找到,繼續與下乙個對比

if fit:

alist[pos2]

=none

#若找到,則消去該位上的字母

else

: stillok =

false

#若未找到,程式終止

pos1 = pos1 +

1return stillok

str1 =

str(

input

('please input the first word: '))

str2 =

str(

input

('please input the second word: '))

if anagramsolution1(str1, str2)

:print

('anagram'

)else

:print

('not anagram'

)#方案2:排序法(時間複雜度取決於排序演算法)

defanagramsolution2

(s1, s2)

: alist1 =

list

(s1)

alist2 =

list

(s2)

alist1.sort(

)#若為變位詞,則排序後得到相同的字串

alist2.sort(

) pos =

0 matches =

true

while pos <

len(alist1)

and matches:

if alist1[pos]

== alist2[pos]

: pos = pos +

1else

: matches =

false

return match

str1 =

str(

input

('please enter the first string: '))

str2 =

str(

input

('please enter the second string: '))

print

('anagram is %s'

% anagramsolution2(str1, str2)

)#計數法(以空間換取時間,時間複雜度為線性)

defanagramsolution3

(s1, s2)

: c1 =[0

]*26#字元可能有26種情況,所以使用26個計數器,若兩個計數器列表相同,那麼這兩個詞肯定為變序詞

c2 =[0

]*26for i in

range

(len

(s1)):

pos =

ord(s1[i])-

ord(

'a')

#ord()函式返回字元對應的ascii數值

c1[pos]

= c1[pos]+1

for i in

range

(len

(s2)):

pos =

ord(s2[i])-

ord(

'a')

c2[pos]

= c2[pos]+1

j =0 stillok =

true

while j <

26and stillok:

if c1[j]

== c2[j]

: j = j +

1else

: stillok =

false

return stillok

Python實現變位詞判斷

題目要求 如果乙個字串是 另乙個字串的重新排列組合,那麼這兩個字串互為變位詞。比如,heart 與 earth 互為變位 詞,mary 與 army 也互為變位詞。輸入格式 第一行輸入第乙個字串,第二行輸入第二個字串。輸出格式 輸出 yes 表示是互換詞,輸出 no 表示不是互換詞。輸入樣例1 在這...

變位詞判斷問題

heart earth python typhon 寫乙個bool函式判斷兩個詞是否為變位詞 解法1 逐字檢查 由於在python中字串其中字元無法改變,先將單詞賦值到列表中 解法1執行時間數量級為o n 2 def anagram1kenn s1,s2 alist list s1 blist li...

尋找變位詞

程式設計珠璣 五 尋找變位詞 今天的問題是關於變位詞的,首先來看問題的描述 給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。比如,pots stop tops就是變位詞。將變位詞程式組織成三段式的 管道 結構,前乙個程式的輸出檔案將是...