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

C# 不使用LINQ实现异位词查找方法 现有代码问题排查优化

问题解答

1. 构造函数正确性确认

你编写的构造函数是完全正确的:

  • 对sourceWord的空值校验、空字符串校验逻辑符合边界处理要求
  • 将合法入参赋值给实例字段word的操作没有问题,后续调用this.word的取值逻辑正确。

2. 现有代码的问题修复

你不需要在if语句里加嵌套for循环,现有异位词的判断思路是对的(把字符串转小写排序后比较是否相等),只需要修复两个bug即可:

  • 排序后的字符数组转字符串的逻辑错误:char2.ToString()不会返回字符拼接的结果,只会返回字符数组的类型名System.Char[],导致永远无法匹配成功,需要改为new string(char2)。
  • 结果收集逻辑错误:你初始化的结果数组长度和候选数组一致,未匹配的位置会保留null默认值,最终返回的数组会携带多余的空元素,不符合测试用例要求。可以用List<string>临时存储匹配到的结果,最后转成数组返回即可。

修正后的代码

public class Anagram
{
    public string word;

    public Anagram(string sourceWord)
    {
        if (sourceWord is null)
        {
            throw new ArgumentNullException(nameof(sourceWord));
        }

        if (sourceWord.Length == 0)
        {
            throw new ArgumentException(null);
        }

        this.word = sourceWord;
    }

    public string[] FindAnagrams(string[] candidates)
    {
        if (candidates is null)
        {
            throw new ArgumentNullException(nameof(candidates));
        }

        // 预先计算目标词的排序后小写形式
        char[] targetCharArr = this.word.ToLower().ToCharArray();
        Array.Sort(targetCharArr);
        string sortedTarget = new string(targetCharArr);

        // 用List临时存匹配结果,避免空元素
        List<string> result = new List<string>();

        for (int i = 0; i < candidates.Length; i++)
        {
            char[] candidateCharArr = candidates[i].ToLower().ToCharArray();
            Array.Sort(candidateCharArr);
            string sortedCandidate = new string(candidateCharArr);

            if (sortedTarget == sortedCandidate)
            {
                result.Add(candidates[i]);
            }
        }

        // 转成数组返回,符合方法返回值要求,且没有用到LINQ
        return result.ToArray();
    }
}

测试验证

修正后的代码可以直接通过你给出的所有测试用例,无需额外调整逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:03