Atcoder ABC 137 C問題 

今日は表題の問題にて、ある回答が非常に参考になったため自分流に書き直した。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        char[][] SCA = new char[N][10];
        long cnt = 0;
        Map<String, Long> sMap = new HashMap<>();

        for (int i = 0; i < N; i++) {
            SCA[i] = sc.next().toCharArray(); //文字列中の文字をソートできるように分割
            Arrays.sort(SCA[i]);//文字列をアルファベット順にソート
            String si = new String(SCA[i]);//文字配列を1つの文字列に戻す
            sMap.put(si, sMap.getOrDefault(si, 0L) + 1);
        }

        for (long n : sMap.values())
            cnt += n * (n - 1) / 2;

        System.out.println(cnt);

    }
}

メソッドを活用することで煩雑な処理も簡潔になり読みやすい。 コメント多用に関してはリーダブルコードをよめってかんじですがそこは目をつむってください。