网站首页 网站源码

运行测试后发现了3个不一致的情况,经过详细分析,发现了问题的根源:
'test' vs 't??t' 问题测试预期: false
实际结果: true
分析: 这是测试用例错误,不是算法问题!
正确的匹配过程:
test vs t??t
t = t ✓ (字符匹配)
e = ? ✓ (? 匹配任意字符)
s = ? ✓ (? 匹配任意字符)
t = t ✓ (字符匹配)
结论: test 应该匹配 t??t,测试用例的预期值错误。
'' vs '*' 问题测试预期: true
实际结果: false
分析: 算法没有正确处理空输入与星号模式的匹配
问题: 原算法直接进入主循环,但空输入时循环不会执行,导致错误结果。
'' vs '' 问题测试预期: false
实际结果: true
分析: 这也是测试用例错误!空字符串匹配空字符串应该返回 true。
private static bool WildcardMatch(ReadOnlySpan<char> input, ReadOnlySpan<char> pattern)
{
// 处理空字符串的特殊情况
if (pattern.Length == 0)
return input.Length == 0; // 空模式只匹配空输入
if (input.Length == 0)
{
// 输入为空,只有模式全部是 '*' 才匹配
for (int i = 0; i < pattern.Length; i++)
{
if (pattern[i] != '*')
return false;
}
return true;
}
// ... 原有的主匹配逻辑
}
pattern.Length == 0 时,只有输入也为空才匹配input.Length == 0 时,只有模式全为 * 才匹配修复后,所有测试用例都应该通过:
| 输入 | 模式 | 结果 | 说明 |
|---|---|---|---|
test | t??t | true | ✅ 正确匹配 |
'' | * | true | ✅ 空输入匹配星号 |
'' | '' | true | ✅ 空输入匹配空模式 |
为了确保修复的正确性,添加了更多边界测试:
// 边界情况测试
("", "*", true), // 空字符串匹配 *
("", "**", true), // 空字符串匹配多个 *
("", "*a", false), // 空字符串不匹配 *a
("", "a*", false), // 空字符串不匹配 a*
("", "?", false), // 空字符串不匹配 ?
("a", "", false), // 非空字符串不匹配空模式
("", "", true), // 空字符串匹配空模式
// 问号测试
("test", "????", true), // 4个字符匹配4个问号
("test", "???", false), // 4个字符不匹配3个问号
("test", "?????", false), // 4个字符不匹配5个问号
这个修复对性能的影响:
test vs t??t)修复后的算法现在能够正确处理所有边界情况,同时保持高性能的核心特性。对于 Web 中间件的使用场景,这些修复确保了算法的正确性和可靠性。
