【问题标题】:Using recursion to test if two strings are the same but reversed使用递归来测试两个字符串是否相同但相反
【发布时间】:2017-03-16 06:35:10
【问题描述】:

对于我的作业,我必须使用递归来测试两个字符串是否相同但相反。

这是实际的问题:

编写一个名为 isStringReversed 的递归方法,给定两个 String 参数,如果两个字符串包含相同的字符序列但顺序相反(忽略大小写),则返回 true,否则返回 false。例如,isStringReversed("piano", "oNaIp") 将返回 true。注意:null(空)字符串和一个字母的字符串都是自己的反义词。

这是我所做的,但是当我执行程序时,我总是得到 虚假回报。这是我的代码:

public static boolean isStringReversed(String s1, String s2) {
    if (s1 == null || s2 == null || s1.length() == 1 || s2.length() == 1) {
        return true;
    }else if (s1.length() != s2.length()) {
        return false;
    }else {
        char s1first = Character.toLowerCase(s1.charAt(0));
        char s2last = Character.toLowerCase(s2.charAt(s2.length() - 1));

        if (s1first == s2last){
            String s1shorter = s1.substring(0, s1.length() - 1);
            String s2shorter = s2.substring(0, s2.length() - 1);
            return isStringReversed(s1shorter, s2shorter);
        }else {
            return false;
        } 
    }
}

【问题讨论】:

  • 欢迎来到 SO。请不要链接您的代码图像。由于许多原因,这没有帮助。在此处发布代码,您将更有可能获得帮助。
  • 不要将文本/代码作为图片/链接发布 (more info)
  • 如果您使用调试器,您会看到您检查了第一个字符,然后删除了最后一个字符。如果您检查了第一个,请删除第一个。

标签: java string recursion


【解决方案1】:

在s1first 上执行substring 时,您应该删除第一个 字符,而不是最后一个字符。

仅在上面一行,您比较 s1first 的 first 字符和 s2last 的 last 字符。因此,一旦您确定它们相等,这就是您删除并继续递归的内容。

【讨论】:

    【解决方案2】:

    这是递归的想法

            public static bool isStringReversed(string input1, string input2)
            {
                string s1 = input1.ToLower();
                string s2 = input2.ToLower();
    
                if(s1 == null && s2 == null) 
                    return true;
                if (s1.Length == 1 && s2.Length == 1)
                {
                    if (s1 == s2)
                        return true;
                    return false;
                }
    
                if (s1.Length != s2.Length)
                    return false;
    
                return isStringReversedRec(s1, s2, s1.Length - 1, 0);
    
            }
    
            private static bool isStringReversedRec(string s1, string s2, int indexS1, int indexS2)
            {
                if (indexS1 < 0)
                    return true;
    
                if (s1.charAt(indexS1) != s2.charAt(indexS2))
                    return false;
    
                return isStringReversedRec(s1, s2, indexS1 - 1, indexS2 + 1);
            }
    

    【讨论】:

      【解决方案3】:

      而不是

          String slshorter = sl.substring(0, s1.1ength() - l) ;
          String s2shorter = s2.substring(0, s2.1ength() - l) ;
      

      使用

          String slshorter = sl.substring(1) ;
          String s2shorter = s2.substring(0, s2.1ength() - 1) ;
      

      请注意,substring() 方法的第二个参数表示该索引独占。

      【讨论】:

      • 美丽。经过我脑海中的逻辑,现在我明白了。谢谢一百万。
      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多