Sourcejava
package codewars.dec; //https://www.codewars.com/kata/54b42f9314d9229fd6000d9c/train/java import java.util.*; public class DuplicateEncoder { static String encode(String word) { char[] arr = word.toCharArray(); boolean[] replaceArr = new boolean[arr.length]; for (int i = 0; i < arr.length; i++) { if (replaceArr[i]) { continue; } Character ch = arr[i]; Character oppo = null; if (Character.isLetter(ch)) { oppo = Character.isLowerCase(ch) ? Character.toUpperCase(ch) : Character.toLowerCase(ch); } Set<Integer> set = new HashSet<Integer>(); set.add(word.indexOf(ch)); set.add(word.lastIndexOf(ch)); if (word.contains(String.valueOf(oppo))) { set.add(word.indexOf(oppo)); set.add(word.lastIndexOf(oppo)); } if (set.size() > 1) { for (int j = 0; j < arr.length; j++) { if (!replaceArr[j]) { if (arr[j] == ch || oppo != null && arr[j] == oppo) { arr[j] = ')'; replaceArr[j] = true; } } } } else if (set.size() == 1) { for (int j = 0; j < arr.length; j++) { if (!replaceArr[j]) { if (arr[j] == ch) { arr[j] = '('; replaceArr[j] = true; } } } } } return new String(arr); } }