为什么我的prefixAgain代码无法正常工作?

时间:2019-02-26 18:24:58

标签: java string

给出一个字符串,考虑由字符串的前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;
        }
    }
}     

1 个答案:

答案 0 :(得分:0)

您的解决方案有很多问题:

  • 为什么在n方法中只需要循环到prefixAgain?您可能需要走到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的字符)开始在子字符串中搜索所需的前缀。

保持简单。 :)