Problem#
給你兩個字串 order 和 s,要你把 s 按照 order 的字母順序排序,沒出現在裡面的字母位置隨意,回傳排序後的字串。
測資限制#
- $1 \le \text{order} \le 26$
- $1 \le \text{s} \le 200$
想法#
Naive: 最簡單就是用 std::sort 加上自訂的 operator< $O(n\log{n})$,sort 完後便是答案。
Improve: 先統計 order 的字母的出現次數 m[ch] = count,接著掃過一次 s[i] = ch,按照 order 的字母出現次數去產生 m[ch] 個 ch 加到答案中;如果 ch 沒出現在 order 中,則直接將 ch 加到答案中。如此一來便只要 $O(n)$ 時間複雜度,便可以得到答案。
AC Code#
Naive#
- 時間複雜度: $\mathcal{O}(n\log{n})$
- 空間複雜度: $\mathcal{O}(n)$
Improved#
- 時間複雜度: $\mathcal{O}(n)$
- 空間複雜度: $\mathcal{O}(n)$