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();
    }
} 
by