Given a string s
and a set of n
substrings. You are supposed to remove every instance of those n substrings from s so that s is of the minimum length and output this minimum length.
Example
Given s = ccdaabcdbb
, substrs = ["ab", "cd"]
Return 2
Explanation:
ccdaabcdbb
-> ccdacdbb
-> cabb
-> cb
(length = 2)
java
public class Solution {
/*
* @param s: a string
* @param dict: a set of n substrings
* @return: the minimum length
*/
public int minLength(String s, Set<String> dict) {
// write your code here
if (s == null || s.length() == 0 || dict == null || dict.size() == 0) {
return -1;
}
Queue<String> queue = new LinkedList<>();
Set<String> set = new HashSet<>();
queue.offer(s);
set.add(s);
int min = Integer.MAX_VALUE;
while (!queue.isEmpty()) {
String str = queue.poll();
min = Math.min(min, str.length());
for (String sub : dict) {
int index = str.indexOf(sub);
while (index != -1) {
String newStr = str.substring(0, index) + str.substring(index + sub.length(), str.length());
if (!set.contains(newStr)) {
set.add(newStr);
queue.offer(newStr);
}
index = str.indexOf(sub, index + 1);
}
}
}
return min;
}
}