從here得到這個問題。但是我能算出的算法的運行時間非常糟糕。這裏是問題:美麗的字符串
如果s的所有字符都不相同,那麼字符串s被稱爲唯一。 如果我們可以刪除s1的一些 字符以獲得s2,則可以從字符串s1產生字符串s2。
如果s1的長度比s2的長度更長,則s1比s2更漂亮比s2的長度更長或長度相等,s1是 按字典順序大於s2。
鑑於一個字符串s,你必須找到最美麗的獨特的字符串 可以從s生產。
輸入:第一行輸入字符串不超過 1,000,000(10^6)個字符。 s的所有字符都是小寫字母 英文字母。
輸出:打印最美麗獨特的字符串,它是從 小號
樣品輸入producable:BABAB
樣本輸出:BA
我所做的是:
- 取出字符串,並刪除所有相同的相鄰字符與單個。例如:輸入:「bbbbbab」輸出:「bab」,這是此步驟的輸出。這成爲下一步的輸入。
- 現在爲字符串中的每個唯一字符構建一個數組。該數組將在給定的輸入數組中具有其出現的索引。
- 注意每個元素的第一次出現。查找出現的最小值和最大值。使用迭代遍歷所有可能的字符串,這些字符串可以由以索引max結尾的單詞形成。採取詞典學上最大的。
- 通過移動max來重複上述操作。
我想要一個正確和高效的算法,它可以在輸入字符串非常大時進行縮放。
感謝您的鏈接...似乎是有效的。 – kdurga
不幸的是,在鏈接中提到的解決方案是錯誤的,我試圖實現它自己..嘗試輸入「abcdefabdc」輸出應該是「bcefad」,鏈接中給出的算法返回「bcdefa」.. – kdurga
答案似乎是「efadbc」,解決方案在這個鏈接似乎是正確的[鏈接](http://skilldrill.wordpress.com/2013/06/28/beautiful-unique-strings/) – kdurga