`

java-63-在字符串中删除特定的字符

 
阅读更多

public class DeleteSpecificChars {

	/**
	 * Q 63 在字符串中删除特定的字符
	 * 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
	 * 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
	 */
	public static void main(String[] args) {
		String strSource="They are students";
		String strDelete="aeiou";
		String result=deleteSpecificChars(strSource,strDelete);
		System.out.println(result);
	}

	/*
	 * 1.use a 'hashtable' to record the letters to be delete
	 * 2.use two pointers to shrink the source string:
	 * replace the letter to delete with the following letter not to delete
	 */
	public static String deleteSpecificChars(String strSource,String strDelete){
		char[] charSource=strSource.toCharArray();
		char[] charDelete=strDelete.toCharArray();
		int sLen=strSource.length();
		int dLen=strDelete.length();
		int[] exist=new int[256];
		for(int i=0;i<dLen;i++){
			char letter=charDelete[i];
			exist[letter]++;
		}
		int pSlow=0,pFast=0;
		while(pFast<sLen){
			char curLetter=charSource[pFast];
			if(exist[curLetter]==0){//should not delete 
				charSource[pSlow]=charSource[pFast];
				pSlow++;
			}
			pFast++;
		}
		return new String(charSource,0,pSlow);//unlike c/c++,we can only form a string in this way
	}
}

分享到:
评论
3 楼 qqswin 2013-04-24  
写的不怎么好
2 楼 neyshule 2012-06-27  
我觉得你不能就把c++翻译过来吧。。。。。。
1 楼 neyshule 2012-06-27  
这个算法也不对阿,只覆盖前面的话肯定会有重复阿,c++可以因为用pointer,这边不行。

相关推荐

Global site tag (gtag.js) - Google Analytics