2015-03-31 22 views
2

我想查找兩個字符串是否是anagrams .. 我認爲要對它們進行排序,然後逐個檢查,但有沒有用於排序蜇傷的算法?或另一個想法,使其? (簡單的想法或代碼,因爲我是初學者)謝謝是兩個字符串anagrams或不?

+1

我不明白downvotes。這個問題有點簡單,但與許多其他幫助請求不同,至少這顯示了一些努力,將問題減少爲字符串排序。 – chi 2015-03-31 17:20:26

回答

6

字符串是Haskell中的字符列表,因此標準sort只是起作用。

> import Data.List 
> sort "hello" 
"ehllo" 

您的想法排序,然後比較檢查anagrams罰款的聲音罰款。

+0

它工作!謝謝:) – 2015-03-31 15:10:30

1

我可以給你和想法 - (因爲我不是很瞭解哈斯克爾)。 取一個有26個空格的數組。

現在爲第一個字符串中的每個字符增加數組中的標記位置。

如果數組A[26]={0,0,...0} 現在,如果您找到'a',然後將A[1]=A[1]+1; if'b'then A[2]=A[2]+1;

現在,在每個字符第二串的情況下,你降低值在同一陣列中發現的每個字符。(如果你發現「A」降低A [1]像A[1]=A[1]-1

最後檢查是否所有數組元素爲0或不是。如果是0,那麼肯定他們是另一種不是一個字謎。

注意:您可以對大寫字母進行類似的擴展。

1

這是沒有必要數人羣每個字母。

簡而言之,您可以對字符串進行排序,然後檢查兩個列表中的每個元素。

例如,你有這樣的

"cinema" and "maneci" 

這將有助於使你的字符串轉換爲字符的列表。

['c','i','n','e','m','a'] and ['m','a','n','e','c','i'] 

然後,您可以對這些列表進行排序,您將檢查每個字符。 請注意,您將有這些情況:

example [] [] = True 
example [] a = False 
example a [] = False 
example (h1:t1)(h2:t2) = if h1==h2 then _retroactively_ else False 
相關問題