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

字符串回文单词统计代码异常:输入"I Deed"未正确返回2个回文单词

问题分析与修复:回文单词统计代码错误

任务描述

给定由单词组成的字符串s,统计其中回文单词的数量。回文单词指正读和反读完全相同的单词,单词间由一个或多个空格分隔。

问题现象

  • 输入"Deed"时,代码返回1(结果正确)
  • 输入"I Deed"时,代码仅返回1,正确结果应为2

代码bug定位

问题出在回文判断的索引使用上:

int i=st;
int j=e-1;
bool isPalindrome=true;
while(i<=j)
{
    if(temp[i]!=temp[j])
    {
        isPalindrome=false;
        break;
    }
    i++;
    j--;
}

这里错误地使用了原字符串的索引st和e-1来访问临时字符串temp。temp是当前单词的小写副本,它的索引范围是0到temp.size()-1,而非原字符串的位置索引。当处理第二个及以后的单词时,st已经是原字符串中靠后的位置,用它访问temp会导致索引越界,进而错误地判定单词不是回文。

比如输入"I Deed"时,处理第二个单词"Deed"生成的temp是"deed",但代码用st=2作为起始索引访问temp,temp[2]是有效字符,但j=e-1=5超出了temp的长度(仅4个字符),越界访问的随机值会导致回文判断失败,最终计数少加1。

修复后的代码

#include <bits/stdc++.h> 
char toLowerCase(char ch)
{
    if(ch>='A' && ch<='Z')
    {
        ch=ch-'A'+'a';
    }
    return ch;
}
int countNumberOfPalindromeWords(string s)
{
    int st=0,e=0;
    int lengt=s.length();
    int cnt=0;
    while(st<lengt && e<lengt)
    {
        if(s[e]!=' ')
        {
            string temp="";
            while(e<lengt && s[e]!=' ')
            {
                temp+=toLowerCase(s[e]);
                e++;
            }

            // 改用temp的本地索引判断回文
            int i=0;
            int j=temp.size()-1;
            bool isPalindrome=true;
            while(i<=j)
            {
                if(temp[i]!=temp[j])
                {
                    isPalindrome=false;
                    break;
                }
                i++;
                j--;
            }
            if(isPalindrome)
            {
                cnt++;
            }
            st=e;
        }
        else{
            e++;
            st++;
        }
    }
    return cnt;
}

修复说明

将回文判断的起始索引改为0,末尾索引改为temp.size()-1,确保在temp的有效范围内进行字符比较,正确识别每个单词是否为回文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:53:20