package su.interview;
import java.util.Arrays;
/**
* 从字符串中删除出现的子串
* @author Toy
*
*/
public class String_01 {
/**
* 在逐个扫描主串中的字符是否在子串中实现
* @param fstr
* @param sub
* @return
*/
public String deleteSubChar_01(String fstr,String sub){
StringBuilder s=new StringBuilder();
for(int i=0;i<fstr.length();i++){
String curr=fstr.charAt(i)+"";
if(!sub.contains(curr)){
s.append(curr);
}
}
return s.toString();
}
/**
* 用指针,直接覆盖出现过的字符串
* @param fstr
* @param sub
* @return
*/
public String deleteSubChar_02(String fstr,String sub){
char[] arr = fstr.toCharArray();
int k=0;
for(int i=0;i<arr.length;i++){
if(!sub.contains(arr[i]+"")){
arr[k++]=arr[i];
}
}
return String.copyValueOf(arr, 0, k);
}
/**
* 以计数数组思想为基础,将子字符串散列
* @param fstr
* @param sub
* @return
*/
public String deleteSubChar_03(String fstr,String sub){
char[] arr = fstr.toCharArray();
int[] smap=new int[256];
Arrays.fill(smap, 0);
for(int i=0;i<sub.length();i++){
smap[sub.charAt(i)]=smap[sub.charAt(i)]+1;
}
int k=0;
for(int i=0;i<arr.length;i++){
if(smap[arr[i]]==0){
arr[k++]=arr[i];
}
}
return String.copyValueOf(arr, 0, k);
}
public static void main(String[] arge){
String fstr="They are students";
String sub="aeiou";
String_01 s=new String_01();
String r = s.deleteSubChar_01(fstr, sub);
System.out.println(r);
r = s.deleteSubChar_02(fstr, sub);
System.out.println(r);
r = s.deleteSubChar_03(fstr, sub);
System.out.println(r);
}
}
从字符串中删除出现的子串
最新推荐文章于 2023-04-27 22:05:29 发布