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

验证C是否为A、B的有效洗牌:自创算法正确性与时间复杂度确认

算法正确性与时间复杂度分析

一、算法正确性判定

你的算法不正确,存在明确的反例:
设A="ba",B="ab",C="baba"。
按照你的算法步骤执行:

  1. 遍历C匹配A:
    • 初始i=0,C[0]是'b',和A[0]匹配,i递增到1;
    • 下一个字符C[1]是'a',和A[1]匹配,i递增到2,此时A已全部匹配完成,标记C[0]、C[1]为A的字符;
  2. 验证剩余未标记字符:剩下的C[2]='b'、C[3]='a'组成"ba",和B="ab"不符,算法判定C不是有效洗牌。
    但实际上,C是完全符合要求的有效洗牌:我们可以选择C[0]作为A的'b'、C[3]作为A的'a';同时C[1]作为B的'a'、C[2]作为B的'b'。这样A的相对顺序(b在前、a在后)和B的相对顺序(a在前、b在后)都得到了保持,显然是有效洗牌。

问题出在你的算法采用了贪心匹配策略——遇到第一个能匹配A当前字符的C字符就直接计数,这种方式会错过正确的匹配路径,导致误判。

二、时间复杂度分析

你的时间复杂度分析是正确的,算法确实是O(n):

  • 第一次遍历C(长度n=len(A)+len(B)),每个字符仅处理一次;
  • 第二次遍历C,同样每个字符仅处理一次,用于验证未标记字符是否符合B的顺序;
    两次遍历总操作数是2n,根据大O表示法的规则,2n等价于O(n)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:05:10