問題説明
文字列で構成されているstringsとnがパラメータとして与えられた時に、各文字列のn番目の文字を基準で昇順ソートを行いたいと思います。
例えばstringsが[sun, bed, car]でnが1の場合、u、e、aでstringsをソートします。
条件
- stringsの長さは1以上、50以下の配列です。
- stringsの要素は小文字アルファベットで構成されています。
- stringsの要素の長さは1位上、100以下の文字列です。
- 全てのstringsの要素はの長さはnより大きいです。
- n番目の要素が複数の場合は、辞書配列順にソートします。
入出力の例
| strings | n | return |
| [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番目の文字を基準で昇順ソートを行います。
終わりに
これよりいいアルゴリズムがあるかもしれないのですが、自分がやったコードで解説をやってみました。
他の方法や指摘などがありましたら、コメントをよろしくお願いいたします。
