アルゴリズム – 文字列のn番目の文字を基準でソートする

問題説明

文字列で構成されているstringsとnがパラメータとして与えられた時に、各文字列のn番目の文字を基準で昇順ソートを行いたいと思います。

例えばstringsが[sun, bed, car]でnが1の場合、u、e、aでstringsをソートします。

条件

  • stringsの長さは1以上、50以下の配列です。
  • stringsの要素は小文字アルファベットで構成されています。
  • stringsの要素の長さは1位上、100以下の文字列です。
  • 全てのstringsの要素はの長さはnより大きいです。
  • n番目の要素が複数の場合は、辞書配列順にソートします。

入出力の例

stringsnreturn
[sun, bed, car]1[car, bed, sun]
[abce, abcd, cdx]2[abcd, abce, cdx]
  • 例1:sun、bed、carの1番目の文字はu、e、aです。それを基準でソートすると[car, bed, sun]になります。
  • 例2:abceとabcd、cdxの2番目の文字はc、c、xです。なので、ソートするとcdxが一番後ろに行き、abceとabcdは辞書配列順にソートするので、abcdが先なので[abcd, abce,cdx]となります。

解説

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {

        Arrays.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1.charAt(n) == o2.charAt(n)) {
                    return o1.compareTo(o2);
                }
                return o1.charAt(n) - o2.charAt(n);
            }
        });
        
        return strings;
    }
}
  • Arrays.sortを使ってソートを行いました。
    • Arrays.sort(配列、Comparator)
  • o1.charAt(n) == o2.charAt(n):n番目の文字が同じ文字なのかを反転します。
  • return o1.compareTo(o2):n番目の文字が同じ文字であれば、書配列順にソートにソートを行います。
  • return o1.charAt(n) – o2.charAt(n):n番目の文字を基準で昇順ソートを行います。

終わりに

これよりいいアルゴリズムがあるかもしれないのですが、自分がやったコードで解説をやってみました。

他の方法や指摘などがありましたら、コメントをよろしくお願いいたします。

コメントを残す