如何删除字符串中重复的字符

package java程序员面试笔试宝典;

import java.util.List;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class 题8_6_3删除字符串中重复的字符 {
	public static void main(String[] args) {
		String str="good you are my sister";
		System.out.println(1<<3);
		System.out.println(removeDuplicate_1(str));
	}
	//空间换时间
	public static String removeDuplicate_1(String str){
		char[] chs=str.toCharArray();
		int[] flag=new int[8];
		for (int i = 0; i < chs.length; i++) {
			int index=chs[i]/32;
			int shift=chs[i]%32;
			if((flag[index]&(1<<shift))!=0){
				chs[i]='\0';
			}else{
				flag[index]|=(1<<shift);
			}
		}
		int p=0;
		for (int i = 0; i < chs.length; i++) {
			if(chs[i]!='\0'){
				chs[p++]=chs[i];
			}
		}
		return new String(chs, 0, p);
	}
	//暴力破解法
	public static String removeDuplicate_0(String str){
		char[] chs=str.toCharArray();
		for (int i = 0; i < chs.length; i++) {
			for (int j = i+1; j < chs.length; j++) {
				if(chs[i]==chs[j]){
					chs[j]='\0';
				}
			}
		}
		int p=0;
		for (int i = 0; i < chs.length; i++) {
			if(chs[i]!='\0'){
				chs[p++]=chs[i];
			}
		}
		return new String(chs, 0, p);
	}
	//set集合法
	public static String removeDuplicate(String str){
		Set<Character> set=new HashSet<Character>();
		char[] chs=str.toCharArray();
		StringBuffer sb=new StringBuffer();
		for (int i = 0; i < chs.length; i++) {
			if(set.add(chs[i])){
				sb.append(chs[i]);
			}
		}
		String strs=new String(sb);
		System.out.println(strs);
		return strs;
	}
}

猜你喜欢

转载自blog.csdn.net/m0_38068868/article/details/81739578