《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就是變位詞。將變位詞程式組織成三段式的 管道 結構,前乙個程式的輸出檔案將是...