九章演算法 抖音面試題 外星人字典

2021-10-20 11:29:16 字數 1889 閱讀 6960

描述

有一種新的使用拉丁字母的外來語言。但是,你不知道字母之間的順序。你會從詞典中收到乙個非空的單詞列表,其中的單詞在這種新語言的規則下按字典順序排序。請推導出這種語言的字母順序。

你可以假設所有的字母都是小寫。

如果a是b的字首且b出現在a之前,那麼這個順序是無效的。

如果順序是無效的,則返回空字串。

這裡可能有多個有效的字母順序,返回以正常字典順序看來最小的。

lintcode 領扣

樣例1

輸入:["wrt","wrf","er","ett","rftt"] 

輸出:"wertf"

解釋:

從 "wrt"和"wrf" ,我們可以得到 't'<'f'

從 "wrt"和"er" ,我們可以得到'w'<'e'

從 "er"和"ett" ,我們可以得到 get 'r'<'t'

從 "ett"和"rftt" ,我們可以得到 'e'<'r'

所以返回 "wertf"

樣例2

輸入:["z","x"] 

輸出:"zx"

解釋:

從 "z" 和 "x",我們可以得到 'z' < 'x'

所以返回"zx"

題解

使用拓撲排序演算法。

這個版本的實現當中,無需假設所有字母為小寫字母

/** 

* this reference program is provided by @jiuzhang.com

*/class

solution

private

map<

character

,set

<

character

>>

constructgraph

(string

words)}

}// create edges

for(

inti=0

;i<

words

.length-1

;i++)index

++;}

}return

graph;}

private

map<

character

,integer

>

getindegree

(map

<

character

,set

<

character

>>

graph

)for

(characteru:

graph

.keyset

())}

return

indegree;}

private

string

topologicalsorting

(map

<

character

,set

<

character

>>

graph)}

stringbuildersb=

newstringbuilder

();while

(!queue

.isempty

())}}if

(sb.length

()!=

indegree

.size

())returnsb.

tostring

();}

}

更多題解參考:九章演算法

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法面試題32 小球排序

有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...

九章演算法面試題33 陣列波峰

乙個陣列a 1.n 假設陣列中沒有任何相鄰兩數相等,滿足a 1 n。a i 被稱為波峰,當且僅當a i a i 1 並且a i a i 1 請找到陣列中的乙個波峰。假設陣列中存在相鄰相等的數,該怎麼做?根據條件a 1 a n 可知a中一定存在波峰。用二分法,選擇中點mid,如果a mid 是波峰,則...