Возможно упростить алгоритм?
Как-нибудь так? Правда, это C#, но разница должна быть небольшая.public static String moveLetters(String a) {
        int L=a.Length;
        char[] chars = new char[L];
        for(int x=0;x<L;x++) chars[x]=a[x==1 ? L-L%2-1 : x-2*(x%2)];
        return new String(chars);
}
На будущее, на случай, если кто-то не силен в тернарном операторе переписал для if...elsepublic static String moveLetters(String s) {
        int L = s.length();
        char[] chars = new char[L];
        int i = 0;
        for (int x = 0; x < L; x++) {
            if (x % 2 == 0) {
                i = x;
            } else {
                if (x == 1) {
                    i = L - L % 2 - 1;
                } else {
                    i = x - 2;
                }
            }
            chars[x] = s.toCharArray()[i];
        }
        return new String(chars);
    }
* для тех кто в C# не разбирается код из предыдущего ответа, только для Javapublic static String moveLetters(String str) {
        int L = str.length();
        char[] chars = new char[L];
        for (int x = 0; x < L; x++) {
            chars[x] = str.toCharArray()[(x % 2 == 0) ? (x) : (x == 1) ? (L - L % 2 - 1) : (x - 2)];
        }
        return new String(chars);
    }