今日は表題の問題にて、ある回答が非常に参考になったため自分流に書き直した。
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); } }
メソッドを活用することで煩雑な処理も簡潔になり読みやすい。 コメント多用に関してはリーダブルコードをよめってかんじですがそこは目をつむってください。