首页 > 解决方案 > 为什么我的 prefixAgain 代码不起作用?

问题描述

给定一个字符串,考虑由字符串的前 N ​​个字符组成的前缀字符串。该前缀字符串是否出现在字符串的其他位置?假设字符串不为空并且 N 在 1..str.length() 范围内。

public boolean prefixAgain(String str, int n) {
    String res = "";
    String res1 = "";
    String s = str.substring(0,n);
    for ( int i = 0  ; i < n ; i++ ) { 
        res += str.charAt(i) ;  
        if (s.equalsIgnoreCase(res)); {
            return true;  
        } else { 
            return false;
        }
    }
}     

标签: javastring

解决方案


您的解决方案存在许多问题:

  • 为什么只需要nprefixAgain方法中循环直到?你可能需要一直到str.length()
  • 您的res变量将再次成为字符串的前缀,并且没有用。
  • 为什么你有;之后if
  • 在循环中使用+=字符串可能非常昂贵。您应该始终考虑使用StringBuilder它的append方法。

以下方法可以满足您的要求:

public boolean prefixAgain(String str, int n) {
    if (str.length() == 1) return false;
    String s = str.substring(0, n);
    return str.substring(1).contains(s);
}

主要思想是从第二个字符(索引处的字符1)开始在子字符串中搜索所需的前缀。

把事情简单化。:)


推荐阅读