Algorithm 挤压功能挤压(s1,s2)。。。。。需要建议
我想写一个挤压函数挤压(s1,s2),删除s1中与字符串s2中任何字符匹配的每个字符 除了时间复杂度(m*n)之外,是否还有其他算法可用,即遍历字符串s1m次(s2的长度)并跳过s2中出现的所有字符 谢谢 创建位图(布尔数组) 遍历字符串s2,切换与字符对应的每个位 遍历字符串s1,如果对应位为真,则跳过该字符 显然,如果希望允许更多字符,请修改长度(下面的示例需要ToLower()/ToUpper(),因为它使用26) 粗略的C#概念验证示例(准备粘贴到LINQPad中): 您可以通过将掩码设置为128长来支持ASCII。(并删除ToLower()调用)等。使用集合Algorithm 挤压功能挤压(s1,s2)。。。。。需要建议,algorithm,Algorithm,我想写一个挤压函数挤压(s1,s2),删除s1中与字符串s2中任何字符匹配的每个字符 除了时间复杂度(m*n)之外,是否还有其他算法可用,即遍历字符串s1m次(s2的长度)并跳过s2中出现的所有字符 谢谢 创建位图(布尔数组) 遍历字符串s2,切换与字符对应的每个位 遍历字符串s1,如果对应位为真,则跳过该字符 显然,如果希望允许更多字符,请修改长度(下面的示例需要ToLower()/ToUpper(),因为它使用26) 粗略的C#概念验证示例(准备粘贴到LINQPad中): 您可以通过将掩码设
private static String squeeze(String s1, String s2) {
StringBuilder sb = new StringBuilder();
HashSet<Character> set = new HashSet<Character>();
for(char c: s2.toCharArray()) set.add(c);
for(char c: s1.toCharArray())
if(!set.contains(c))
sb.append(c);
return sb.toString();
}
//示例
String s1 = "badcode";
String s2 = "abcd";
String squeezed = squeeze(s1,s2);
输出:oe
private static String squeeze(String s1, String s2) {
StringBuilder sb = new StringBuilder();
BitSet bs = new BitSet(256);
for(char c: s2.toCharArray()) bs.set(c);
for(char c: s1.toCharArray())
if(!bs.get(c))
sb.append(c);
return sb.toString();
}
String s1 = "badcode";
String s2 = "abcd";
String squeezed = squeeze(s1,s2);