public class DeleteDuplicateChar {
/**
* 去除字符串中重复的字符
* @author yyp
* @createdate 2014-1-27 下午1:25:06
* @Description: (用一句话描述该方法做什么)
* @param args
*
*/
public static void main(String[] args) {
int recArr = 0;
recArr |= 1<<1;
int tmp = recArr | (1<<1);
if(tmp > recArr){
System.out.println("The first appear!");
} else {
System.out.println("delete");
}
String s = "ab@%$^ cdefc*(& gred^&%$ ddklih$%#@ bdklrt*$#@";
System.out.println("s old :" + s);
// s = deleteCharIndex(s, 6);
s = deleteDuplicateChar(s);
System.out.println("s new :" + s);
}
/**
* 删除一个字符串中的重复字符,只扫描一遍字符串,O(n).
* @author yyp
* @createdate 2014-1-27 下午5:56:35
* @Description: (用一句话描述该方法做什么)
* @param str
* @return
*
*/
public static String deleteDuplicateChar(String str){
int[] flags = new int[4];
int i = 0;
while(i < str.length()){
int tmp = str.charAt(i);
int offset = tmp / 32;
if(flags[offset] == (flags[offset] | 1 << (tmp % 32))){
str = deleteCharIndex(str, i + 1 );
i--;
}else {
flags[offset] = flags[offset] | 1 << (tmp % 32);
}
i++;
}
return str;
}
/**
* 删除字符串指定位置的字符,下标从1开始
* @author yyp
* @createdate 2014-1-27 下午5:55:58
* @Description: (用一句话描述该方法做什么)
* @param str
* @param index
* @return
*
*/
public static String deleteCharIndex(String str, int index){
if(str == null || "".equals(str)){
throw new RuntimeException();
}
if(index <= 0 || index > str.length()){
throw new RuntimeException();
}
byte[] sArr = str.getBytes();
return new String(sArr, 0, index - 1) + new String(sArr, index, sArr.length - index);
}
}
删除字符串中的重复字符(字符串为ASCII)
最新推荐文章于 2020-03-21 14:57:44 发布