java - 为什么我的 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;
}
}
}
解决方案
您的解决方案存在许多问题:
- 为什么只需要
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
)开始在子字符串中搜索所需的前缀。
把事情简单化。:)
推荐阅读
- python-3.x - 检查嵌套列表中某个元素的字符串
- wpf - 子菜单打开而不关闭子菜单时修改 WPF 窗口
- linked-list - 链表不断出现段错误
- reactjs - 最后一个子组件覆盖所有子组件
- multithreading - 如何使用多线程脚本
- javascript - contenteditable 正在触发父级模糊
- python - Gensim Word2Vec模型在相同环境和平台中相同源代码的两个编辑器中的不同结果?
- python - Neural network having suspiciously bad results
- angular - FormGroup 期望来自组实例离子应用程序
- javascript - Using props.change to change the value of an input field in redux-form