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

如何判断字符串是否包含另一字符串的全部字符(不考虑顺序)

结论

没有能直接一步实现这个判断逻辑的预定义函数。
这个判断本质是校验prt的字符多重集是不是str的子集:不光要prt里的每个字符都在str里存在,还得要求str里对应字符的出现次数,大于等于prt里这个字符的出现次数。举个反例,要是prt是"sss",str是"Pegasus"(里面s只出现2次),就应该返回false。

常用实现方式

1. 字符计数法(性能最好,通用场景推荐)

时间复杂度是两个字符串长度的和,不管有没有重复字符都能正确判断:

  • 如果只需要处理ASCII字符,直接开一个长度256的int数组存计数就行,比字典性能高;要是需要支持全量Unicode字符,换Dictionary<char, int>存计数就可以
  • 先遍历一遍str,把每个字符的出现次数累加到计数存储里
  • 再遍历prt的每个字符,每读到一个字符就把对应计数减1,要是减完计数小于0,直接返回false——这说明要么str里根本没这个字符,要么这个字符的数量不够
  • 遍历完prt所有字符都没触发计数小于0的情况,直接返回true

拿你给的示例来说:str="Pegasus"、prt="eas",统计完str里e、a各出现1次,s出现2次;遍历prt的时候三个字符对应计数减完分别是0、0、1,全程没出现负数,所以返回true,符合预期。
如果需要做不区分大小写的判断,在计数、比对的时候把字符统一转成大写或者小写再处理就行。

2. 简化写法(仅适合prt无重复字符的特殊场景)

如果能确定prt里的字符全不重复,可以用LINQ方法凑出极简写法:

bool match = prt.All(c => str.Contains(c));

注意:这个写法不会校验字符的出现次数,要是prt里有重复字符,比如prt="ee"但str里只有1个e,这个写法会错误返回true,通用场景别用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:28:04