描述
刪除字符串中重復的字符
分析
方法一,蠻力法。兩個循環,大循環每次從數組中取出一個字符,小循環重新遍歷該數組是否含有該字符。
方法二:排序法。對兩個字符串的字符進行排序,再比較。
方法三:空間換時間。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")); } }