在字符串中删除特定字符
63.在字符串中删除特定的字符。
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。
思路:
1. 位图法
将两个字符串分别转换成bitmap 然后对他们做异或xor运算,得到的结果即为排除了第二个字符串的所有字符, 然后对该结果依次与原字符串的所有字符进行与运算,结果不为零的即为所得 恩 位图真是个好东西啊。。。时间复杂度o(n+m) 花在了遍历字符串并构造位图上
2. 遍历字符串,构造hashTable,然后匹配要删除的字符
位图法:
1 package com.rui.microsoft; 2 3 public class Test63_DelCharsFromString { 4 5 public static void main(String[] args) { 6 Test63_DelCharsFromString app = new Test63_DelCharsFromString(); 7 String target = "They are students"; 8 String source = "Taeiou"; 9 app.del(target,source); 10 } 11 12 void del(String target, String source){ 13 int bitT = 0; 14 int bitS = 0; 15 16 for(char c: target.toCharArray()){ 17 bitT |= 1 << c; 18 } 19 20 for(char c: source.toCharArray()){ 21 bitS |= 1 << c; 22 } 23 24 System.out.println(Integer.toBinaryString(bitT)); 25 System.out.println(Integer.toBinaryString(bitS)); 26 27 int inter = bitT ^ bitS; 28 System.out.println(Integer.toBinaryString(inter)); 29 30 for(char c : target.toCharArray()){ 31 if((inter & (1<<c)) != 0){ 32 System.out.print(" " + c); 33 } 34 } 35 } 36 }