You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:46:17