我试图从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;
}
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;
}
您的代码似乎过于复杂。考虑一下:
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 */
}
您的问题是,您既在递增i
,又在使用start.length()-i
。当i
等于1时,start
变量将缩短一个字符。但是当i
为2时,start.length()
已经比原来的少了一个,现在您减去了2个字符,所以现在您错过了一个。end
变量也是如此。不要同时使用递增的i
和不断变化的字符串长度。
要修复它,不要更改原始的start
和end
变量。做这样的事情:
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,直到有足够的上下文可以