C++实现等长字符串同位置匹配字符数统计 修正位置校验缺陷
现有代码的核心逻辑缺陷
原有实现通过对两个字符串排序、计算集合交集来统计匹配数,这套逻辑完全丢失了字符的位置信息,本质是在统计两个字符串中所有共现的字符总数量,不校验字符是否处于相同索引位置,因此会把错位出现的相同字符也计入统计,和“逐位同位置匹配计数”的需求完全不符。
正确实现思路
结合题目给出的前置约束(两个字符串长度相等、大小写规则一致),不需要复杂的集合运算,直接逐位遍历对比即可:
- 初始化计数器存储同位置匹配的字符总数
- 从字符串首字符(索引0)开始,依次对比每一个相同索引位置下的两个字符是否相等
- 遇到相等的字符就将计数器加1,遍历结束后将计数值转为字符串返回即可
修正后的完整代码
string matchingletters(string word, string ptw) { int matchCount = 0; // 题目前置保证两字符串长度相等,无需额外做长度边界校验 for (size_t i = 0; i < word.length(); i++) { if (word[i] == ptw[i]) { matchCount++; } } string result = to_string(matchCount); cout << result << endl; return result; }
效果验证
- 测试用例1:word为
windows、ptw为winowes
逐位对比后同位置匹配的字符为w、i、n、s,最终输出4,和预期结果一致。 - 原错误场景测试:word为
kanton、ptw为balkon
逐位对比后同位置匹配的字符为索引1的a、索引4的o、索引5的n,最终输出3,错位出现的k不会被计入统计,完全符合规则要求。
内容的提问来源于stack exchange,提问作者ozan esici
相关产品推荐
相关产品推荐

