Codingbat strDist递归练习

时间:2016-11-14 23:00:20

标签: java

背景

我目前正在编写与递归相关的codingbat网站上的练习,但是我的程序似乎对某些输入显示错误的结果。

来自codingbat的问题场景

  

给定一个字符串和一个非空子字符串sub,递归计算   最大的子字符串,以sub开头和结尾并返回它   长度。

例如

strDist("catcowcat", "cat") → 9

strDist("catcowcat", "cow") → 3

strDist("cccatcowcatxx", "cat") → 9

我的问题

你能帮我找到会使我的程序显示错误结果的输入吗?

public int strDist(String str, String sub) {

if(str.length() == 0 || sub.length() == 0){
       return 0;
   }

   if( str.length() >= sub.length() ) {

       StringBuilder builder = new StringBuilder(str);
       String getSubFront = builder.substring(0, sub.length());
       String getSubEnd = builder.substring(str.length() - sub.length());

       if (!getSubFront.equals(sub)) {
           builder.deleteCharAt(0);
           return strDist(builder.toString(), sub);
       }

       if (!getSubEnd.equals(sub)) {
           builder.deleteCharAt(builder.length() - 1);
           return strDist(builder.toString(), sub);
       }

   }

   return str.length();
}

3 个答案:

答案 0 :(得分:3)

如果str.length()小于sub.length(),该怎么办?

strDist("a", "aa")应返回0,但程序返回1.

答案 1 :(得分:0)

我是这样做的...

public int strDist(String str, String sub){
    if(str.length() < sub.length()){
       return 0;
    }
    if(str.startsWith(sub)){
       return str.lastIndexOf(sub) + sub.length();
    }else{
       strDist(str.substring(1),sub);
    }
      if(str.length()==0){
          return 0;
    }
      return strDist(str.substring(1),sub);
   }

答案 2 :(得分:0)

另一种解决方案...

public int strDist(String str, String sub) {
  if(str.length() < sub.length() ) return 0;
  if(str.substring(0,sub.length()).equals(sub)){
    if(str.substring(str.length()-sub.length(), str.length()).equals(sub)) {
              return str.length();
    }else{
      return strDist(str.substring(0,str.length()-1), sub);
    }
  }
  
  return strDist(str.substring(1,str.length()), sub);
}