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

标签 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
    }

最佳答案

解决方法

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

关于java - 使用递归从字符串中删除子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52818612/

相关文章:

java - 我将如何优化此外观以获得唯一的数字算法功能

java - 如何知道 javac 是否在 python 中使用 system() 干净地编译

java - 程序给出数字而不是*

c# - 帮助编写文件夹结构的算法

Java - 从已经定义的整数中随机选择

mysql - 按非唯一字段排序时获取 'next' 和 'previous'

java - Maven 尝试从 Maven Central 获取 shrinkwrap-bom,而不是配置的存储库

java - Google Task API 的单元测试

java - 使用还是不使用DTO?

java - 数独逻辑求解器