微软面试题目

输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。

  1. public class DeleteSpecificChars {  
  2.   
  3.     /** 
  4.      * Q 63 在字符串中删除特定的字符 
  5.      * 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 
  6.      * 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.” 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         String strSource="They are students";  
  10.         String strDelete="aeiou";  
  11.         String result=deleteSpecificChars(strSource,strDelete);  
  12.         System.out.println(result);  
  13.     }  
  14.   
  15.     /* 
  16.      * 1.use a 'hashtable' to record the letters to be delete 
  17.      * 2.use two pointers to shrink the source string: 
  18.      * replace the letter to delete with the following letter not to delete 
  19.      */  
  20.     public static String deleteSpecificChars(String strSource,String strDelete){  
  21.         char[] charSource=strSource.toCharArray();  
  22.         char[] charDelete=strDelete.toCharArray();  
  23.         int sLen=strSource.length();  
  24.         int dLen=strDelete.length();  
  25.         int[] exist=new int[256];  
  26.         for(int i=0;i<dLen;i++){  
  27.             char letter=charDelete[i];  
  28.             exist[letter]++;  
  29.         }  
  30.         int pSlow=0,pFast=0;  
  31.         while(pFast<sLen){  
  32.             char curLetter=charSource[pFast];  
  33.             if(exist[curLetter]==0){//should not delete   
  34.                 charSource[pSlow]=charSource[pFast];  
  35.                 pSlow++;  
  36.             }  
  37.             pFast++;  
  38.         }  
  39.         return new String(charSource,0,pSlow);//unlike c/c++,we can only form a string in this way  
  40.     }  
  41. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值