描述
刪除字符串中重復的字符
分析
方法一,蠻力法。兩個循環,大循環每次從數組中取出一個字符,小循環重新遍歷該數組是否含有該字符。
方法二:排序法。對兩個字符串的字符進行排序,再比較。
方法三:空間換時間。acsII共256個字符。使用256bit記錄每個字符是否已出現過。遍歷字符串,若已出現過則將該字符替換為'\0'
方法四:正則表達式。"(?s)(.)(?=.*\\1)"
代碼
方法三,空間換時間。
public class Test {
public static String removeDuplucate(String str){
char[] chars=str.toCharArray();
int len=chars.length;
int[] flag=new int[8]; //有8*32=256bit空間,每一bit代表字符是否出現過。
for(int i=0;i<len;i++){
int index=(int)chars[i]/32;
int shift=(int)chars[i]%32;
if((flag[index]&(1<<shift))!=0)
chars[i]='\0';
flag[index]|=(1<<shift);
}
int j=0;
for(int i=0;i<len;i++){
if(chars[i]!='\0')
chars[j++]=chars[i];
}
return new String(chars,0,j);
}
public static void main(String[] args) {
System.out.println(removeDuplucate("zayyyy"));
}
}