【发布时间】:2013-12-18 05:57:29
【问题描述】:
我有工作代码可以检查“a”中字符串“b”的模式,并用字符串“c”替换那些模式。它利用 String.split() 并多次扫描 String 'a',找到索引来进行替换,并使用 StringBuilder 来避免多余地复制 String 'a'。所以它在线性时间 O(n) 中运行。
现在,问题是如果有重叠的模式匹配,我仍然会得到一个肯定的匹配。例如,在字符串 a = 'ababa' 的情况下 --> 我得到两个字符串 b = 'aba' 的匹配项。如何通过仅替换第一个完整匹配项而不将剩余字符“ba”标识为匹配项来解决此问题。如果 String c = 'c',我期望 a = 'cba' 的结果。
这是我的代码。
public static String replaceSubstringWithPattern () {
String a = "abab";
String b = "aba";
String c = "c";
//Special Cases --> if a or b are empty no need to substitute
if (a.isEmpty() || b.isEmpty()) return a;
StringBuilder aTemp = new StringBuilder();
String[] aArray = a.split(b); // <--
System.out.println("aArray = " + aArray.length);
//Special Cases --> no splits because string a is exclusive repetition of string b
if (aArray.length == 0) {
for (int x = 0; x < a.length()/b.length(); x++) {
aTemp.append(c);
}
return aTemp.toString();
}
aTemp.append(aArray[0]); //firstElement
for (int i=1; i<aArray.length; i++) {
aTemp.append(c);
aTemp.append(aArray[i]);
}
return aTemp.toString();
}
【问题讨论】:
-
你不能只做
a.replaceFirst(b, c);吗? -
result = a.replace(b, c);? -
如果这是家庭作业,请注意,以便我们在不直接回答的情况下给予更好的指导,否则给出的答案是完美的。