我正在尝试实现简单的字符串匹配.如果源 String包含模式 String,则算法应返回1 .我无法理解为什么它在以下输入上返回-1
String source = "aababba";
String pattern = "abba";
Run Code Online (Sandbox Code Playgroud)
这是我的实现:
public static int findMatch(String source, String pattern)
{
int j = 0, pos = -1;
boolean matched = false;
if(source.length() < pattern.length())
return -1;
for(int i = 0; i < (source.length() - pattern.length()); i++)
{
if(source.charAt(i) == pattern.charAt(j))
j++;
else
j = 0;
if(j == pattern.length())
{
matched = true;
break;
}
}
if(matched)
return 1;
return -1;
}
Run Code Online (Sandbox Code Playgroud)
编辑: 正如你们许多人所说,罪魁祸首是for循环.我应该如下所示.其余的代码是一样的.如答案中所示,其他解决方案也是可能的.
for(int i = 0; i <= (source.length() - pattern.length()); i++)
{
if(source.charAt(i+j) == pattern.charAt(j))
{
Run Code Online (Sandbox Code Playgroud)
您只检查三个字符
source.length() - pattern.length()
Run Code Online (Sandbox Code Playgroud)
所以j永远不会等于pattern.length.你需要检查整个source.
for(int i = 0; i < source.length(); i++)
{
if(source.charAt(i) == pattern.charAt(j))
...
}
Run Code Online (Sandbox Code Playgroud)
关于解决方案
for(int i = 0; i <= (source.length() - pattern.length()); i++)
{
if(source.charAt(i+j) == pattern.charAt(j))
{
Run Code Online (Sandbox Code Playgroud)
为什么有一个额外的减法和加法加上更复杂的代码,当你只需要逐步调整源代码?
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |