我正在尝试解决一个问题,我需要使用递归从字符串中删除特定的子字符串。 我可以使用do while循环解决此问题,但这不是最好的方法。
例如, 假设我有一个名为DADDAUUPPA的字符串,并且如果给我一组子字符串,例如“ DD”,“ UU”,“ PP”,“ AA”,则返回的字符串应该是DA,因为DADDAUUPPA-> DAAUUPPA-> DUUPPA-> DPPA-> DA
这是我的解决方案,使用while循环。
String s = "DADDAUUPPA";
do{
String original = s;
return original.replace("DD","").replace("UU","").replace("PP","").replace("AA","" );
} while(!original)
另一个具有挑战性的任务是,如果将这些子字符串作为数组给定,那么我们将如何做呢?
For example,
public soln (String[] sub) {
// sub contains all the substring to be removed
}
答案 0 :(得分:0)
这是一个解决方案
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> subs = new LinkedList<>();
subs.add("DD");
subs.add("AA");
subs.add("UU");
subs.add("PP");
String result = getSubString(subs, "DADDAUUPPA ");
System.out.print(result);
}
private static String getSubString(List<String> subs, String myString) {
if(subs !=null && subs.size() != 0) {
String sub = subs.get(0);
subs.remove(0);
myString = getSubString(subs, myString.replace(sub, ""));
}
return myString;
}
}
要学习的关键是
private static String getSubString(List<String> subs, String myString) {
if(subs !=null && subs.size() != 0) {
myString = myString.replace(subs.get(0), "");
subs.remove(0);
getSubString(subs, myString);
}
return myString;
}
这不起作用,请注意第一种getSubString
和第二种方法之间的区别。随着堆栈展开myString
被分配给原始值。