import java.util.Objects; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { //Recursive approach System.out.println(removeDuplicatesRecursive("RAMAAAAS")); //Iterative approach StringBuilder str = new StringBuilder(); IntStream.range(0, 8000).forEach(i -> str.append("a")); System.out.println(removeDuplicatesIterative(str.toString())); } public static String removeDuplicatesRecursive(String str) { Objects.requireNonNull(str); return removeDuplicatesRecursiveHelper(str, new StringBuilder(), 0); } private static String removeDuplicatesRecursiveHelper(String str, StringBuilder builder, int i) { if (i == str.length()) { return builder.toString(); } if (builder.indexOf(String.valueOf(str.charAt(i))) < 0) { builder.append(str.charAt(i)); } return removeDuplicatesRecursiveHelper(str, builder, i + 1); } public static String removeDuplicatesIterative(String str) { Objects.requireNonNull(str); StringBuilder builder = new StringBuilder(); for (int i = 0; i < str.length(); i++) { if (builder.indexOf(String.valueOf(str.charAt(i))) < 0) { builder.append(str.charAt(i)); } } return builder.toString(); } }