Вопрос: почему моё решение не прошло, а подсмотренное прошло? Работало вроде как одинаково. Моё:
public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (this == obj)
            return true;
        if (obj instanceof Solution) {
            Solution temp = (Solution) obj;
            if (this.first != null && this.last != null && temp.first != null && temp.last != null) {
                return this.first.equals(temp.first) && this.last.equals(temp.last);
            }
        }
        return false;
}
Подсмотренное:
public boolean equals(Object o) {
    if (o == null)
        return false;

    if (!(o instanceof Solution)){
        return false;
    }

    if (this == o) return true;

    Solution solution = (Solution) o;

    if (first != null ? !first.equals(solution.first) : solution.first != null) return false;
    if (last != null ? !last.equals(solution.last) : solution.last != null) return false;

    return true;
}