Remove Specified Characters
Write an efficient function in JAVA that deletes characters from a string. Use the prototype string removeChars( string str, string remove ); where any character existing in remove must be deleted from str. For example, given a str of “Battle of the Vowels: Hawaii vs. Grozny” and a remove of “aeiou”, the function should transform str to “Bttl f th Vwls: Hw vs. Grzny”. Justify any design decisions you make and discuss the efficiency of your solution.
Solution
1. keep a flag array to store the elements in the string removeChars. The search tome complexity could be O(n). Iterate through each element of the string removeChars and change the flag to true.
2.Iterate through str using two pointers p1 and p2, copy each element in the flag array whose value is false. p2 points the element that is needed to read, p1 points to the position that is needed to write in an element. In other words, p2 is used to iterate the whole string while p1 is used to track the length of the new string.
class Solution {
public static String removeSpecifiedCharacters(String str, String remove) {
if (str == null || str.length() == 0)
return null;
if (remove == null || remove.length() == 0)
return str;
char[] r = remove.toCharArray();
boolean[] flag = new boolean[128];
for (int i = 0; i < r.length; i++) {
flag[r[i]] = true;
}
int p1 = 0;
int p2 = 0;
char[] s = str.toCharArray();
while(p2 < s.length) {
if (flag[s[p2]] == false) {
s[p1++] = s[p2];
p2++;
} else {
p2++;
}
}
return new String(s, 0, p1);
}
public static void main(String[] args) {
String str = "abcabcfffui";
String remove = "aeiou";
System.out.print(removeSpecifiedCharacters(str, remove));
}
}