文字列を辞書順で比較

結論

単純に不等号(<)で比較すると、文字列を辞書順で比較した結果を返す。

経緯

AtCoderを覗いていたら下記のような問題で少し考えた

問題文
英小文字のみからなる文字列s, tが与えられます。 あなたは、sの文字を好きな順に並べ替え、文字列 s′を作ります。 また、tの文字を好きな順に並べ替え、文字列 t′を作ります。 このとき、辞書順で s′<t′となるようにできるか判定してください。

引用: AtCoder - B - Two Anagrams

文字列sとtを並び替えて、辞書順でs'<t'であるか否かを判別する問題

考えなければならないこと

  1. どのように文字列を並び替えるか
    求められているのはs'<t'になることがあるか。(言い換えれば、することが出来るか否か)
    つまり、s'はなるべく小さな文字列に、t'はなるべく大きな文字列にする必要がある。

  2. 文字列の辞書順の比較を行う
    なるべく小さくしたs'となるべく大きくしたt'の文字列を
    辞書順で比較してs′<t′となるか判定する必要がある。

1. どのように文字列を並び替えるか

文字列をなるべく小さくするためには、文字列を昇順に比較する。
(逆になるべく大きくするには降順に比較する)

const s = "ratcode";
const t = "atlas";
let ss = s.split('').sort((a, b) => a < b ? -1 : 1).toString(); // 昇順にソート "a,c,d,e,o,r,t"
let tt = t.split('').sort((a, b) => a < b ? -1 : 1).reverse().toString(); // 降順にソート "t,s,l,a,a"

2. 文字列の辞書順の比較を行う

ここで表題の文字列の辞書順比較だが、これは単純に<で比較を行うだけでよい。

if (ss < tt) console.log('true'); // 辞書順でss < ttのため、`true`が出力される。

sをなるべく小さな文字列(昇順ソート)、tをなるべく大きな文字列(降順ソート)すること、
文字列を辞書順で比較するときは<を使うこと、の2点に気づけば簡単にとける問題だったが結構悩んだ。
まだまだ頭が固い。。