#(系统错误)#leetcode#5最长回文数

(系统错误)leetcode#5最长回文数

一.思路

对每一个字符,检测它与它旁边的数是否为回文数,如果是,那么再扩展它 的长度检查,分奇偶情况讨论,得到以该字符为中心最长的回文数。在遍历过程中用max[2]储存该目前最长的回文数位置和长度。这样算法时间复杂度为O(n^2)。

二.实战

class Solution {
public:
    string longestPalindrome(string s) {
     int len=s.length(),check(1);
     int max[2]={0,1};
     if(len==1)
     return s;
     else{
         int i(0);
     while(i<len-1)  //遍历s【i】并check
        {   
        
            if(i==0)//s【0】
            {
                if(s[0]==s[1])
                 check=2;
                 else
                 check= 1;
                 ++i;
            }
            else   //s【0】到s【i-1】
            {    int countodd(1);
                 int count(0);
                 int j(1);
                if(i<len/2)  //分别讨论两边,防溢出 
                {
                    
                    while(i-j>=0)
                     {if(s[i-j]==s[i+j])
                      { countodd+=2;
                       ++j;
                      }
                      else 
                      break;
                     }
                     j=1;
                     while(i-j>=0)
                     {if(s[i-j+1]==s[i+j])
                      { count+=2;
                       ++j;
                      }
                      else 
                      break;
                     } if(count>countodd)
                     check= count;
                     else check= countodd;
                   if(max[1]<check)
                   {
                        max[0]=i;
                        max[1]=check;
                   }
                     
                }
                 else if(i>=len/2)
                {
                    
                    while(i+j<len)
                     {if(s[i-j]==s[i+j])
                      { countodd+=2;
                       ++j;
                      }
                      else 
                      break;
                     }
                     j=1;
                     while(i+j<len)
                     {if(s[i+j-1]==s[i-j])
                      { count+=2;
                       ++j;
                      }
                      else 
                      break;
                     }
                     if(count>countodd)
                     check= count;
                     else check= countodd;
                   if(max[1]<check)
                   {
                        max[0]=i;
                        max[1]=check;
                   }
                
                }
              ++i;
            }
        } 
                 i=0;//录入结果
               int j(0),c(0);
               i=max[0]-max[1]/2;
               j=max[0]+max[1]/2;
               int k(0);
            
               char result[j-i+2];
            if(max[1]%2!=0)
             { while(i<=j)
              {
                  result[c]=s[i];
                  ++c;
                  ++i;
              }
             }
             else
             {
                 ++i;
                 while(i<=j)
              {
                  result[c]=s[i];
                  ++c;
                  ++i;
              }
             }
              return result;
        }

     
    }
};
谜之错误

在这里插入图片描述
在这里插入图片描述
结果眼看着调试得到正确result,到return result,下一步报dynamic stack buffer overflow。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值