質問: j(配列内の同じ値を比べて要素が重複していると判定しているのを防ぐ)の部分はどこに当たりますか。またなぜそうなりますか。
回答: スポーツでの総当たり戦と同じように考えればよいです。 ``` | a | p | c | l | e | --+---+---+---+---+---- a | - | - | - | - | - | p | | - | - | - | - | c | | | - | - | - | l | | | | - | - | e | | | | | - |``` 質問文の1番目の方法では、上の表の対角線のところを弾いているだけです。(無駄な処理があります) 2番目の方法では、左下半分の部分だけを処理しています。(過不足の無い方法です) 2番目の方法での2番めのループが for (int j = i + 1; j < chars.length; j++) { と j = i + 1 としていることで、対角線の下側だけを処理するようにしているのです。