在車庫拍賣上,你以便宜的價格找到一台漂亮的復古打字機!你興奮地衝回家,塞進一張紙,開始打起字來。不過,當你檢查印出來的東西時,興奮感就消退了:所有的字都亂七八糟!例如,它印出「stop」而不是「post」,印出「least」而不是「stale」。你小心翼翼地再試一次,但這次它印出的是「spot」和「slate」。經過一番實驗,你發現每個字母印出前都有隨機的延遲,把順序打亂了。現在你總算明白為什麼他們賣得這麼便宜了吧!
你意識到這個怪毛病讓你能產生重組字,也就是把另一個詞的字母重新排列後所形成的詞。對這個發現很滿意,你就花了接下來一整天的時間產生數百個重組字。
你的任務是:給定一個目標字和一組候選字,找出候選字中所有由目標字重組而成的子集合。
重組字是指把一個字的字母重新排列,形成另一個新的字。例如"owns"就是"snow"的重組字。
一個字本身並不算是自己的重組字。例如"stop"不是"stop"的重組字。
目標字和候選字都是由一個或多個 ASCII 字母(A-Z和a-z)組成的字。
小寫字母和大寫字母視為相同。例如"PoTS"是"sTOp"的重組字,但StoP不是sTOp的重組字。
重組字集合是候選字集合中,所有由目標字重組而成的子集合(順序不拘)。
重組字集合中的字,字母大小寫應該和候選字集合中的相同。
給定目標字"stone"和候選字"stone"、"tones"、"banana"、"tons"、"notes"、"Seton",重組字集合是"tones"、"notes"、"Seton"。
你必須依照候選單字中列出的順序回傳這些重組字。
就像 Isogram 一樣,值得先看看系統裡已經有哪些資料型態可用。 另外,記得一步一步完成測試,一點一點地建構出解法。 除錯器也可以是你的好幫手喔,而且記得,你可以對任何運算式或變數求值,以便更清楚地視覺化並理解它的運作方式。