Java统计字符串中"hi"出现次数代码超时问题求助
解决字符串统计"hi"次数时的超时问题
嘿,我来帮你捋捋这个问题~你遇到的timeout error其实是因为代码陷入了无限循环,程序一直在重复执行循环体,永远停不下来,所以系统判定超时终止了它。
咱们来看看你的代码问题出在哪:
- 索引逻辑混乱:你每次用
str.substring(pos).indexOf("hi")拿到的是子串里的索引,不是原字符串的索引,直接把这个值赋值给pos后,下次循环截取的是原字符串从这个新pos位置开始的内容,这会导致重复统计或者漏统计的情况。 - 无限循环死穴:比如当字符串是
"hi"的时候,第一次pos是0,count变成1,然后str.substring(0)还是原字符串,indexOf("hi")又返回0,循环条件pos != -1永远成立,程序就会一直循环下去,根本停不下来!
修正方案一:用indexOf的重载方法(推荐)
直接在原字符串上指定下一次查找的起始位置,不用创建子串,效率更高:
public int countHi(String str) { int pos = str.indexOf("hi"); int count = 0; while(pos != -1) { count++; // 跳过当前的"hi"(两个字符),从下一个位置开始找 pos = str.indexOf("hi", pos + 2); } return count; }
修正方案二:通过更新子串缩小查找范围
每次把当前"hi"之后的子串作为新的查找对象,避免重复处理前面的内容:
public int countHi(String str) { int count = 0; String currentStr = str; int pos = currentStr.indexOf("hi"); while(pos != -1) { count++; // 截取当前"hi"之后的部分,继续查找 currentStr = currentStr.substring(pos + 2); pos = currentStr.indexOf("hi"); } return count; }
你说用for循环能正常工作,是因为for循环会逐个遍历字符,每次检查当前和下一个字符是否是"h"和"i",逻辑更直白,不会出现索引混乱和无限循环的问题~
内容的提问来源于stack exchange,提问作者Melanie
相关产品推荐
相关产品推荐

