2017-02-11 31 views
3

我的代码有一些问题,因为我的任务中的测试用例出错了,当我在线提交代码时出现运行时错误。该测试用例可以是任何字符串。我相信代码中的一切都很好,因为我已经为许多测试用例手动进行了检查。使用递归来检查字符串是回文吗?

这里是代码

public static boolean isStringPalindrome(String input) { 
    if(input.length()==0 || input.length()==1) 
     return true; 

    int first = 0; 
    int last = input.length()-1; 

    if(input.charAt(first) != input.charAt(last)) 
     return false; 

    String str=""; 
    for(int i=first+1;i<last;i++){ 
     str = str+input.charAt(i); 
    } 
    boolean sa = isStringPalindrome(str); 
    return sa; 
} 

采样输入

racecar 

输出

true 

采样输入

pablo 

输出

false 
+0

您正在收到运行时错误?我很惊讶!你能发布你正在得到什么确切的错误吗? –

+0

@WasiAhmad在线工具并没有告诉它它只是显示简单的msg'运行时错误(NZEC)' –

+0

我已经更新了我的答案,除了'null'字符串检查外,我没有在您的代码中发现任何问题。您可以尝试添加该条件。 –

回答

1

更简单的方法来检查回文可以是:

public static boolean isPalindrome(String s) 
{ if (input == null) 
     return false; 
    else if(s.length() == 0 || s.length() == 1) 
     return true; 

    /* check for first and last char of String: 
    * if they are same then do the same thing for a substring 
    * with first and last char removed. and carry on this 
    * until you string completes or condition fails. 
    */ 
    if(s.charAt(0) == s.charAt(s.length()-1)) 
     return isPalindrome(s.substring(1, s.length()-1)); 

    return false; 
} 

更新

你得到runtime error(NZEC)这意味着non-zero exit code 。这意味着你的程序意外结束。我没有看到任何理由,只是您的程序没有null支票。否则,我已经仔细检查了你的代码,你正在做与我所建议的相同的事情。

+0

我也这样做,但不知何故,我的代码不能用于单个测试用例,我不知道可能是什么情况? –

+0

你有没有发现你的代码不工作的任何测试用例? –

+0

不,我没有找到任何测试用例,虽然检查了许多不同的测试案例,并且都显得工作正常 –

3

您的代码似乎是递归测试,如果String是回文过于复杂。类似的,

public static boolean isStringPalindrome(String input) { 
    if (input == null) { 
     return false; 
    } else if (input.isEmpty() || input.length() == 1) { 
     return true; 
    } 
    int len = input.length() - 1; 
    return input.charAt(0) == input.charAt(len) // 
      && isStringPalindrome(input.substring(1, len)); 
} 

是递归的,没有嵌入for循环。因为如果你能做到这一点,你应该这样做

public static boolean isStringPalindrome(String input) { 
    if (input == null) { 
     return false; 
    } else if (input.isEmpty() || input.length() == 1) { 
     return true; 
    } 
    int len = input.length(); 
    for (int i = 0; i <= len/2; i++) { 
     if (input.charAt(i) != input.charAt(len - 1 - i)) { 
      return false; 
     } 
    } 
    return true; 
} 
+1

感谢您的快速帮助,但我无法找到我的代码有什么问题,因为我的逻辑与您的逻辑相同。 –

+0

@PrinceVijayPratap你的代码缺少'null',这可能是测试用例正在测试的内容。 –

+0

@JornVernee好的等待我会尝试 –