当前位置: 首页 > 知识库问答 >
问题:

使用递归方法对两个字符串之间的第一个不同字符进行索引

袁旻
2023-03-14

我需要使用递归方法找到两个字符串之间第一个不同字符的索引。

具有预期产出的示例:

rFirstDistinctPlace(“小包裹”、“小椒盐卷饼”)->8

rFirstDistinctPlace(“Gold Shadow”,“Gold Shadow”)->0

rFirstDistinctPlace(“Gold”、“Golda”)->4

rFirstDistinctPlace(“Gold”,“Gold”)->-1

注意:我不能使用.equals()函数

我正在纠结的是,如果字符串相等,我需要返回-1,否则它可以正常工作。

这是我的代码:

    public static int rFirstDistinctPlace (String s1, String s2) {  
    if (smallestString(s1,s2).length()==0){
            return 0;
    }
    if(s1.charAt(0)!=s2.charAt(0))
        return rFirstDistinctPlace(s1.substring(0,0),s2.substring(0,0));

    return 1+rFirstDistinctPlace(s1.substring(1),s2.substring(1));

}

这是帮助器方法sMallestString:

    public static String smallestString (String s1, String s2){
    if(s1.length()>s2.length()){
        return s2;
    }
    else if (s2.length()>s1.length()){
        return s1;
    }
    else
        return s1;
}

谢谢!

共有2个答案

呼延化
2023-03-14

没那么复杂。

  1. 如果字符串相等,则返回-1
  2. 如果其中一个字符串的长度为0或者它们的第一个字符不匹配,则返回0
  3. 否则,返回1+rFirstDistinctPlace(S1.substring(1),S2.substring(1))

演示:

class Main {
    public static void main(String[] args) {
        System.out.println(rFirstDistinctPlace("Little parcels", "Little pretzels")); // 8
        System.out.println(rFirstDistinctPlace("Gold shadow", "gold shadow"));// 0
        System.out.println(rFirstDistinctPlace("gold", "golda"));// 4
        System.out.println(rFirstDistinctPlace("gold", "gold"));// -1
    }

    public static int rFirstDistinctPlace(String s1, String s2) {
        if (Objects.equals(s1, s2))
            return -1;

        if (s1.length() == 0 || s2.length() == 0 || s1.charAt(0) != s2.charAt(0))
            return 0;

        return 1 + rFirstDistinctPlace(s1.substring(1), s2.substring(1));
    }
}

输出:

8
0
4
-1
乐正心思
2023-03-14

递归解决方案:

>

  • 如果两个字符串为空,表示它们相等,则返回-1

    否则,如果其中一个字符为空或前几个字符不匹配,则返回0

    如果结果是-1,则返回它,如果是-1,则返回它加上1

    public static void main(String[] args) {
        System.out.println(rFirstDistinctPlace("Little parcels", "Little pretzels")); //8
        System.out.println(rFirstDistinctPlace("Gold shadow", "gold shadow")); //0
        System.out.println(rFirstDistinctPlace("gold", "golda")); //4
        System.out.println(rFirstDistinctPlace("gold","gold")); //-1
    }
    public static int rFirstDistinctPlace (String s1, String s2) {
        if(s1.isEmpty() && s2.isEmpty()) return -1;
        else if (s1.isEmpty() || s2.isEmpty() || s1.charAt(0) != s2.charAt(0)) return 0; 
        int index = rFirstDistinctPlace(s1.substring(1), s2.substring(1));
        return index == -1 ? index : 1 + index;
    }
    

    迭代解决方案:

    • 使用for-loop迭代这两个字符串,直到它到达其中一个字符串的末尾
      • 如果当前索引处的两个字符串的字符不同,则返回i
      public static int rFirstDistinctPlace (String s1, String s2) {
          int i = 0;
          for(i = 0; i < s1.length() && i < s2.length(); i++) {
              if(s1.charAt(i) != s2.charAt(i)) {
                  return i;
              }
          }
          return s1.length() != s2.length() ? i : -1;
      }
      

  •  类似资料:
    • 问题内容: 给定两个相等长度的字符串,是否有一种优雅的方法来获取第一个不同字符的偏移量? 显而易见的解决方案是: 但这对于如此简单的任务而言似乎并不正确。 问题答案: 您可以使用按位XOR()的一个不错的属性来实现此目的:基本上,当您将两个字符串异或时,相同的字符将变为空字节()。因此,如果我们对两个字符串进行异或运算,我们只需要使用以下命令找到第一个非空字节的位置: 这里的所有都是它的。因此,让

    • 问题内容: 假设我们有类似的东西: 我想将“ someText”替换为其他内容。考虑到我不知道someText可能是什么(任何字符串)并且我所知道的是它将被&firstString =和&endString =包围的事实,最佳方法是什么? 编辑:对不起,看起来这还不够清楚。我不知道“ someText”可能是什么,我仅有的信息是它将位于&firstString =和&endString =之间 我

    • 问题内容: 例如,假设我有一个字符串,如下所示: 可以从该字符串中提取什么Go代码?我对Go还是比较陌生。任何帮助是极大的赞赏! 问题答案: 有很多方法可以拆分所有编程语言中的字符串。 由于我不知道您的特别要求,因此提供了一种示例方法,可从示例中获取所需的输出。 在上面的代码中,您从字符串的左侧和右侧进行了修剪。 正如我所说的,有数百种拆分特定字符串的方法,但这只是使您入门的一个示例。 希望对您有

    • 我是Python的超级新手,并试图创建一个非常简单的函数,用于更大的地图着色程序。 该函数的思想是将一组变量归于不同的区域(string1),并将颜色分配给它们(r、g、b),然后通过递归地查看一组区域边界(string2)来测试这些区域是否接触到相同颜色的另一个区域,以找到匹配的变量颜色。 输入格式如下:("Ar, Bg, Cb","AB, CB, CA")将返回True,这意味着没有相同颜色的

    • 问题内容: 我需要从两个字符之间获取字符串。我有这个 并且必须在一个变量中分别返回4个字符串: 问题答案: 有。由于它接受正则表达式字符串,并且是正则表达式中的特殊字符,因此您需要对其进行转义(带有反斜杠)。而且,由于是在Java中字符串字面特殊字符,你需要逃脱 它 ,也一样,人们有时会感到迷惑。因此给出: 然后 将输出 ( 在 前三位上 有 尾随空格;如果需要,这些空格。)

    • 问题内容: 我试图从一个较大的字符串中提取一个字符串,使它在’:’和’;’之间得到一切。 当前 期望的输出 问题答案: 你可以试试这个