PostAddsense


StringTrain Topcoder



public class StringTrain
{
    public String buildTrain(String[] cars) {
        String train = cars[0];
        for (int i=1; i < cars.length; i++) {
            for (int j = cars[i].length()-1; j > 0; j--) {
                String s1 = cars[i].substring(0,j);
                if (!train.equals(s1) && train.endsWith(s1)) {
                    train += cars[i].substring(j);
                    break;
                }
            }
        }

        String t="";
        for (int i=0; i < train.length(); i++) {
            char ch = train.charAt(i);
            String s = train.substring(i+1);
            if(s.indexOf(ch) == -1) t += ch;
        }

        return "" + train.length() + " " + t;
    }
}


Explanation

첫 번째 for문:
가장 많이 겹친 글자들부터 시작해야 하고 마지막 글자는 포함되면 안되므로, j = cars[i].length() - 1이다.
s1이 train과 같으면 안되므로 !train(equals(s1)), 뒤에서 부터 검색해야하므로 train.endsWith(s1).

두 번쨰 for문:
중복된 문자를 제거한다. s.indexOf(ch) 로 검색되는 값이 없다면, ch는 마지막으로 남은 문자이므로 t에 더한다.


References