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

我的Haskell longestChain函数无法正常运行,需修改哪些代码?

问题排查与修复方案

原有代码核心问题

  • 缺少边界处理:没有定义空字符串、长度为1的字符串的返回值,输入长度<2的字符串时会直接报错
  • 未记录历史最大长度:现有逻辑只会累加当前连续相同字符的长度,遇到字符变化时会直接丢弃之前的连续长度记录,无法和后续新的连续串长度做比较,比如输入"11111222"时会错误返回3,前面的长度5没有被保存下来
  • 递归步进逻辑错误:当两个字符相等时直接跳过y进入xs的递归,实际应该保留y作为下一次比较的第一个元素,因为下一个字符还要和y比对是否连续,比如"111"按原有逻辑仅能得到2,和预期结果3不符

修复后可运行代码

通过带状态的辅助函数实现,记录当前连续长度、历史最大值两个状态:

longestChain :: String -> Int
-- 空字符串边界处理
longestChain [] = 0
-- 非空字符串调用辅助函数,初始当前连续长度为1,初始最大值为1
longestChain s = helper s 1 1
  where
    -- 递归到最后一个字符,返回当前最大值
    helper [_] current maxVal = max current maxVal
    helper (x:y:xs) current maxVal
      -- 当前两个字符相等,当前连续长度+1,同步更新最大值
      | x == y = helper (y:xs) (current + 1) (max (current + 1) maxVal)
      -- 字符不相等,当前连续长度重置为1,最大值保持不变
      | otherwise = helper (y:xs) 1 maxVal

测试用例验证

全部测试用例均可正常通过:

  • longestChain "2111234" 返回3
  • longestChain "0023212212222" 返回4
  • longestChain "23232323232" 返回1
  • longestChain "+++++!!!-------" 返回7

内容的提问来源于stack exchange,提问作者topi12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:09