leetcode_question_5 Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

stupid method:

int self_in_mid(string s, int index){
        int length = 1;
        int size = s.length();
        while((index-length >= 0) && (index + length < size)){
            if(s[index-length] == s[index + length]) length ++;
            else break;
        }
        return (length - 1)*2 + 1;
    }
    int self_with_left(string s, int index){
        int length = 1;
        int size = s.length();
        while((index-length >= 0) && (index + length -1 < size)){
            if(s[index-length] == s[index + length - 1]) length ++;
            else break;
        }
        return (length - 1)*2;
    }
    
    string longestPalindrome(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(s.length() < 2) return s;
        
        int ssize = s.length();
        int maxposition1 = 1;
        int maxlength1 = 1;
        int maxposition2 = 1;
        int maxlength2 = 0;
        for(int i = 1; i < ssize; ++i){
            int tmp = self_in_mid(s,i);
            if(tmp > maxlength1){
                maxlength1 = tmp;
                maxposition1 = i;
            }
            tmp = self_with_left(s,i);
            if(tmp > maxlength2){
                maxlength2 = tmp;
                maxposition2 = i;
            }
        }
        
        if(maxlength1 > maxlength2)
        return s.substr(maxposition1 - (maxlength1-1)/2, maxlength1);
        else
        return s.substr(maxposition2 - maxlength2/2, maxlength2);
    }

dp:

下面的这段代码在leetcode上面运行报error:


然后我就想在本地调试,看看哪出问题了,同样的代码添加了两行输出之后在本机运行,输出为:


同样的代码不同的输出!这是哪出问题了?没想通。。。

class Solution {
public:
    char S[2002];
    int P[2002];
    string longestPalindrome(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int ssize = s.length();
        int slength = 0;
		S[slength++] = '$';
		for(int i = 0; i < ssize; ++i){
			S[slength++] = '#';
			S[slength++] = s[i];			
		}
		S[slength] = '#';

		int id = 0;
		int mx = 0;
		for(int i = 1; i < slength; ++i){
			if(mx > i) 
				P[i] = P[2*id-i] < (mx-i) ? P[2*id-i] : (mx-i);
			else 
				P[i] = 1;
			while(S[i-P[i]] == S[i+P[i]])
				++P[i];
			if(i+P[i]>mx){mx = i+P[i]; id = i;}
		}

		mx = 1;
		for(int i = 1; i < slength; ++i)
			if(P[i]>mx)
			{
				mx = P[i];
				id = i;
			}
		--mx;
		return s.substr((id-mx+1)/2-1, mx);
    }
};

add codes as follows, it is Accepted!

memset(P,0,sizeof(int)*2002);
memset(S,'0',sizeof(char)*2002);



class Solution {
public:
    char S[2002];
    int P[2002];
    string longestPalindrome(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
    	memset(P,0,sizeof(int)*2002);
        memset(S,'0',sizeof(char)*2002);
        int ssize = s.length();
        int slength = 0;
		S[slength++] = '$';
		for(int i = 0; i < ssize; ++i){
			S[slength++] = '#';
			S[slength++] = s[i];			
		}
		S[slength] = '#';

		int id = 0;
		int mx = 0;
		for(int i = 1; i < slength; ++i){
			if(mx > i) 
				P[i] = P[2*id-i] < (mx-i) ? P[2*id-i] : (mx-i);
			else 
				P[i] = 1;
			while(S[i-P[i]] == S[i+P[i]])
				++P[i];
			if(i+P[i]>mx){mx = i+P[i]; id = i;}
		}

		mx = 1;
		for(int i = 1; i < slength; ++i)
			if(P[i]>mx)
			{
				mx = P[i];
				id = i;
			}
		--mx;
		return s.substr((id-mx+1)/2-1, mx);
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值