【发布时间】:2023-03-09 15:11:01
【问题描述】:
假设你被告知要实现一种 java String.substring 方法。
该方法的签名如下:
public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)
这是我的解决方案,但我觉得它仍然不是我能拥有的最好的优雅解决方案。(许多规范的 if else's)
你怎么看?你会用另一种方式来做吗?
public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)
{
int strForSearchIndex = 0;
int subStrToFindIndex = 0;
boolean endOfStringToSearch = false;
boolean foundSubString = false;
boolean isThereASequenceOfMatching = false;
while(!endOfStringToSearch && !foundSubString)
{
if(strForSearchIndex == i_StringForSearch.length())
{
endOfStringToSearch = true;
}
else if(i_StringForSearch.charAt(strForSearchIndex) == i_SubStringToFind.charAt(subStrToFindIndex))
{
isThereASequenceOfMatching = true;
if(subStrToFindIndex == i_SubStringToFind.length() -1 )
{
foundSubString = true;
}
subStrToFindIndex++;
strForSearchIndex++;
}
else if(i_StringForSearch.charAt(strForSearchIndex) != i_SubStringToFind.charAt(subStrToFindIndex))
{
if(isThereASequenceOfMatching)
{
subStrToFindIndex = 0;
isThereASequenceOfMatching = false;
}
strForSearchIndex++;
}
}
return foundSubString;
}
【问题讨论】:
-
您可能希望将其移至 codereview.stackexchange.com 以获得更好的响应! (如果是,也将其标记为作业)!
-
在我看来,这更像是
contains而不是substring。substring有一个非常清楚的目的,这与这里的非常不同。 -
你为什么要重新发明轮子?
-
当你被告知要实现与通用构建 API 相同或可以使用的东西时,从头开始重写它是没有意义的。
-
因为这是一个很好的练习,如果你是第一次被告知要写它的人,那你会说什么?
标签: java string substring complexity-theory time-complexity