Here's a better solution using a hash setmap:
public static String encode(String input) {
final Set<Character>StringBuilder setbuilder = new HashSet<>StringBuilder();
final StringBuilderMap<Character, builderInteger> indexMap = new StringBuilderHashMap<>();
for (charint chindex := 0; index < input.toCharArraylength(); index++) {
char set.add(ch = Character.toLowerCase(chinput.charAt(index));
for (char ch : inputif(indexMap.toCharArraycontainsKey(ch)) {
ch int previous = CharacterindexMap.toLowerCaseget(ch);
builder.replace(previous, previous+1, ")");
builder.append(set')');
}else {
indexMap.containsput(ch, index);
? ')' : builder.append('(');
}
}
return builder.toString();
}
It requires O(n) time and O(n) additional space, but it's way faster than yours. Also, try using a StringBuilder if you append strings in a loop.