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 }
新聞熱點
疑難解答