使用递归从字符串中删除子字符串

时间:2018-10-15 14:08:05

标签: java algorithm

我正在尝试解决一个问题,我需要使用递归从字符串中删除特定的子字符串。 我可以使用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
    }

1 个答案:

答案 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被分配给原始值。