【问题标题】:how to use backtracking recursion in java如何在java中使用回溯递归
【发布时间】:2019-06-13 16:18:49
【问题描述】:

我正在尝试编写一个获取两个字符串的方法,并检查它是否能够对它们进行子串化以获得相同的字符串。例如,如果 s1 = "abc" 和 s2 = "abbbc" 它将返回 true。我想在 BackTracking 递归中做到这一点。

这是我的代码不起作用:

private static boolean isTrue(String s1, String s2) {
    boolean right= false;

    if(s1 == s2)
        right = true;

    else {
        if(s1.length() > 0 && s2.length() > 0) {
            right = isTrue(s1, s2.substring(1)) || isTrue(s1.substring(1), s2.substring(1));
        }
    }

    return right;
}

请帮忙?

【问题讨论】:

  • “不工作”不是一个足够精确的错误描述,我们无法帮助您。 什么不起作用? 如何不起作用?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?
  • 欢迎来到 SO! “能够对它们进行子串化以获得相同的字符串”是什么意思?请用预期的 i/o 和示例进行说明。
  • 对不起,我的意思是这个方法返回“false”而不是“true”。因为 s1 = "abc" 和 s2 = "abbbc",所以我可以使用 s2.substring(3) 来获取 s1。这就是为什么我希望该方法将返回“true”。
  • 虽然我不确定您在做什么,但关于 Java 的重要一点是 s1==s2 不比较字符串,而是比较对象引用。你必须改用s1.equals(s2)
  • "abc" 不是 "abbbc" 的子串。

标签: java recursion backtracking


【解决方案1】:

假设您的意思是如果第二个字符串包含第一个字符串中的所有字符,这将是递归的解决方案。

static boolean isTrue(String s1,String s2,int count) {
    if(count == s1.length()){
        return true;
    }
    else{
        CharSequence cs = new StringBuilder(s1.substring(count, count+1));
        if(s2.contains(cs)){
            s2 = s2.replaceFirst(s1.substring(count, count+1), "");
            return isTrue(s1,s2,count+1);
        }
        else{
            return false;
        }
    }
}

如果您想检查第一个字符串是否是第二个字符串的子字符串,您可以使用 contains 方法在不递归的情况下进行检查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多