我在网上找到了这个答案,但我无法理解以下几行代码在完整代码中的作用:
if (haystackLen - i + 1 < needleLen)
return null;
找到以下完整代码:
public String strStr(String haystack, String needle) {
int needleLen = needle.length();
int haystackLen = haystack.length();
if (needleLen == haystackLen && needleLen == 0)
return "";
if (needleLen == 0)
return haystack;
for (int i = 0; i < haystackLen; i++) {
// make sure in boundary of needle
if (haystackLen - i + 1 < needleLen)
return null;
int k = i;
int j = 0;
while (j < needleLen && k < haystackLen && needle.charAt(j) == haystack.charAt(k)) {
j++;
k++;
if (j == needleLen)
return haystack.substring(i);
}
}
return null;
}
答案 0 :(得分:0)
if (haystackLen - i + 1 < needleLen)
return null;
因此,您正在迭代haystack
并检查其中的needle
。在每次迭代
haystackLen - i + 1
给出了要解析的大海捞针中String的长度,当你想要找到的needleLen
小于你要确定进一步迭代时没有用的{{1}}。 / p>
答案 1 :(得分:0)
基本上你的代码正在检查第二个String在第一个String中是否存在(确切地)然后你返回First String。
为:
haystack="indian";
needle="india";
然后输出将是“印度”
如果
haystack="indian";
needle="indian";
然后输出将是“印度”。
如果
haystack="india";
needle="indian";
然后输出将为“null”。
这是你的困惑。
if (haystackLen - i + 1 < needleLen)
return null;
如果第二个字符串长度大于第一个,并且第一个字符串匹配,直到第二个字符串中的当前索引,它返回null;这意味着第二个String不是第一个String的子串。