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

CodingBat也一样处理弦

乌鸿宝
2023-03-14

我试图从CodingBat做这个问题,但不明白为什么它不与输入字符串“你好!”工作。

这是我的代码,下面是我得到的结果。

public String sameEnds(String string) {
        String result;
        int strLen = string.length();
        boolean isOdd = (strLen % 2 != 0);
        String start = string.substring(0, strLen / 2);
        String end;
        if (isOdd) {
            end = string.substring(strLen / 2 + 1);
        } else {
            end = string.substring(strLen / 2);
        }
        int i = 0;
        while (!start.equals(end) && i <= start.length()) {
            start = start.substring(0, start.length() - i);
            end = end.substring(i, end.length());
            i++;
        }
        if (start.equals(end)) {
            result = start;
        } else {
            result = "";
        }
        return result;
    }

共有3个答案

徐茂材
2023-03-14
public String sameEnds(String string) {
  int mid = string.length() / 2;
  String ls = string.substring(mid);
  String result = "";
  int index = -1;
  int i = 0;

  if (string.length() < 2) {
    return "";
  }

  if (string.length() % 2 == 1) {
    i = 1;
  }

  // All we need to do is loop over the second part of the string,
  // find out the correct substring that equals to the origin string which start the index of '0'.

  for (; i < ls.length(); i++) {
    index = string.indexOf(ls.substring(i));
    if (index == 0) {
      result += ls.substring(i);
      break;
    }
  }

  return result;
}
司马项明
2023-03-14

您的代码似乎过于复杂。考虑一下:

public String sameEnds(String string) {
   int e = string.length() - 1;                  /* end of string */
   int b = string.length() / 2;                  /* where to start looking for a match */

   while (--b >= 0) {                            /* ran off the front yet? */

       /*
        * Starting just below the center of the string,
        * look for a character which matches the final character
        */
       for ( ; b >= 0; --b) {
          if (string.charAt(e) == string.charAt(b)) break;
       }

       /*
        * found a match to the final character (a possible starting point)
        * compare characters backwards until no match or all matched
        * (temp vars ee and bb walk backwards from e and b respectively)
        *
        *    "|f|r|o|b|o|z|z|Q|Q|Q|f|r|o|b|o|z|z|"
        *                  ^                   ^
        *                  |                   |
        *         <--bb    b          <--ee    e
        */
       for (int ee = e, bb = b; bb >= 0; --bb, --ee) {
          if (string.charAt(bb) != string.charAt(ee)) break;  /* no match */
          if (bb == 0) return string.substring(0, b+1);       /* victory! */
       }
   }
   return new String("");                              /* nothing matched */
}
隆璞
2023-03-14

您的问题是,您既在递增i,又在使用start.length()-i。当i等于1时,start变量将缩短一个字符。但是当i为2时,start.length()已经比原来的少了一个,现在您减去了2个字符,所以现在您错过了一个。end变量也是如此。不要同时使用递增的i和不断变化的字符串长度。

要修复它,不要更改原始的startend变量。做这样的事情:

    String sTmp = start;
    String eTmp = end;
    while (!sTmp.equals(eTmp) && i <= start.length()) {
        sTmp = start.substring(0, start.length() - i);
        eTmp = end.substring(i, end.length());
        i++;
    }
    if (sTmp.equals(eTmp)) {
        result = sTmp;
    } else {
        result = "";
    }
    return result;
 类似资料:
  • 我读过许多文章,其中有许多不同的配置来实现一次处理。 下面是我的生产者配置: 以下是我的使用者配置: 我试图跟随,但我遇到了一些问题: 下面是我的生产者代码: 我的消费代码:

  • 我一直在经历一些编码蝙蝠练习,我遇到了这个问题。"给定一个字符串,返回字符串中最大"块"的长度。块是相同的相邻字符的运行。"所需输出: 除了最后一个“其他测试”,我的代码似乎通过了所有测试。请有人检查一下我的代码,告诉我哪里出了问题。 提交的代码:

  • 问题内容: 从历史上看,我总是这样编写我的异常处理代码: 但是最近,出于可读性和懒惰的原因,我开始这样做: 我将光标(jdbc句柄,无论如何)的赋值从try-catch-finally块中分配出来是错误的吗? 除非JVM实际上在分配上爆炸,否则在分配和try块中任何内容的第一行之间,我不确定我的旧样式是否会带来任何额外的价值,而第二种肯定更易读和简洁。文献通常总是采用第一种风格。 编辑 -假设我很

  • 问题内容: 该声明是 并通过java.sql.PreparedStatement’stmt’插入参数 如果为null,则在每种情况下该语句均不返回任何行,因为它始终为false(应为)。一种解决方案是 但是然后我必须两次设置相同的参数。有更好的解决方案吗? 谢谢! 问题答案: 我一直按照您在问题中所表现的方式来做。两次设置相同的参数不是很大的困难,不是吗?

  • 本文向大家介绍浅谈webpack对样式的处理,包括了浅谈webpack对样式的处理的使用技巧和注意事项,需要的朋友参考一下 本文介绍了webpack对样式的处理,分享给大家,具体如下: 我们可以在js中引入样式文件 这时我们便需要引入相应的webpack loader来帮助我们解析这段代码。 css-loader搭配style-loader 首先,我们可以引入css-loader和style-lo

  • 问题内容: 我一直在概念上为我的项目决定异常处理结构。 假设您有一个示例: 还有两个子类FileData和StaticData,它们从某些指定的文件中读取数据,StaticData仅返回一些预定义的常量数据。 现在,在读取文件时,可能会在FileData中引发IOException,但是StaticData将永远不会抛出。大多数样式指南建议在调用堆栈上传播Exception,直到有足够的上下文可以