1.3 Design an algorithm and write code to remove the duplicate characters in a string without using any additional buffer. NOTE: One or two additional variables are fine. An extra copy of the array is not.
FOLLOW UP
StringBuffer.deleteCHarAt(int index)
FOLLOW UP
Write the test cases for this method.
import java.util.Scanner;
import java.util.Arrays;
public class Solution{
//time complexity O(n^2), keep relative sequence
public static String removeDuplicate(String s){
StringBuffer sb = new StringBuffer(s);
for(int i=0;i < sb.length()-1;i++){
for(int j=i+1;j < sb.length();)
if(sb.charAt(i) == sb.charAt(j))
sb.deleteCharAt(j);//j(remain unchanged),and naturally point next,
else
j++;
}
return sb.toString();
}
//time complexity O(nlogn), couldn't keep relative sequence
public static String removeDuplicate2(String s){
char[] cs = s.toCharArray();
Arrays.sort(cs);
StringBuffer sb = new StringBuffer(new String(cs));
for(int i=0;i < sb.length()-1;){
if(sb.charAt(i) == sb.charAt(i+1))
sb.deleteCharAt(i+1);//j(remain unchanged),and naturally point next,
else
i++;
}
return sb.toString();
}
public static void main(String[] args){
Scanner keyin = new Scanner(System.in);
String s = null;
while(!(s=keyin.next()).equals("quit")){
System.out.println(Solution.removeDuplicate2(s));
}
}
}
StringBuffer.deleteCHarAt(int index)