标签:++ long else for 一点 div realloc 示例 return
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
这条题的思路主要是从一个或两个字符开始往两边遍历,直到遍历出最长的回文字符串为止。
问题就出来这个从一个字符还是两个字符开始了。。开始弄了好几个条件,结果递归算一下发现靠控制条件要控到十万八千里远。。。
后来我的办法就是,先从一个字符开始遍历,完了之后看一下能不能从两个字符开始,能就再做一遍遍历。。。
还有一点要注意的是,realloc之前一定要先赋值,不然就干瞪眼吧。。
char* longestPalindrome(char* s) { int len,maxlen=0; char *l,*r,*head=s; int i,j; char *rtn=0; while(*s) { len=-1; l=s; r=s; for(j=0;j<2;j++) { do{ if(*l!=*r) break; else len+=2; }while(l--!=head&&*r++!=‘\0‘); if(len>maxlen) { maxlen=len; rtn=(char *)realloc(rtn,sizeof(char)*(len+1)); for(i=0; i<len; i++) rtn[i]=l[i+1]; rtn[len]=‘\0‘; } if(*s!=*(s+1)) break; else { l=s; r=s+1; len=0; } } s++; } return rtn; }
标签:++ long else for 一点 div realloc 示例 return
原文地址:https://www.cnblogs.com/onlyandonly/p/9314913.html