去除重复字母

51 阅读1分钟

// 去除重复字母  
// 输入:s = "bcabc"  
// 输出:"abc"  
public static String removeDuplicate(String s){  
    boolean[] vis = new boolean[26];  
    int[] num = new int[26];  
    for (int i = 0; i <s.length() ; i++) {  
        num[s.charAt(i)-'a']++;  
    }  
    StringBuffer sb = new StringBuffer();  
    for (int i = 0; i <s.length(); i++) {  
        char ch = s.charAt(i);  
        if(!vis[ch-'a']){  
            while(sb.length()>0&&sb.charAt(sb.length()-1)>ch){  
                if(num[sb.charAt(sb.length()-1)-'a']>0){  
                    vis[sb.charAt(sb.length()-1)-'a']=false;  
                    sb.deleteCharAt(sb.length()-1);  
                }else{  
                    break;  
                }  
            }  
            vis[ch-'a']=true;  
            sb.append(ch);  
        }  
        num[ch-'a']-=1;  
   }  
    return sb.toString();  
}