笔试——字符串算法题——寻找最大回文子串

如题:代码返回最大的回文子串,长度一样返回第一个。
空间效率O(1)
时间效率O(N)(一边遍历搞定)

#include <stdio.h>

char* answer;

char* maxPalindrome( const char *s )
{
	bool hasStart = false;
	int startPos = 0, max = 1, maxStart = 0, maxEnd = 0;
	for( int i=1; s[i]!='\0'; i++ )
	{
		if( !hasStart )
		{
			if( s[startPos]==s[i] )
			{
				if( i-startPos>max )
				{
					max = i-startPos;
					maxStart = startPos;
					maxEnd = i;
				}
				continue;
			}
		}

		if( startPos>0 && s[startPos-1]==s[i] ) //李文文指出此处要先检查startPos>0
		{
			startPos--;
			hasStart = true;
		}
		else
		{
			if( hasStart==true )
				startPos = --i;
			else
				startPos = i;
			hasStart = false;
		}

		if( startPos<=0 || i-startPos+1>max )
		{
			max = i-startPos;
			maxStart = startPos;
			maxEnd = i;
		}
	}

	int length = maxEnd-maxStart+1;
	answer = new char[length+1];
	for( int i=0; i<length; i++ )
	{
		answer[i] = s[i+maxStart];
	}
	answer[length] = '\0';
	return answer;
}



int main()
{
	char s[10][100] = { 
		"aigbcddcbgaaaaaaaa",
		"aigbcddcbggggggggg",
		"aaaaa",
		"aaaaaa",
		"aaaaaaaigbcddcbgiaaaaaaa",
		"a"
	};
	
	for( int i=0; i<6; i++ )
		printf( "%s\n", maxPalindrome(s[i]) );
}


这个自己理解吧,我也不多说了没什么难度。欢迎反馈各种错误 输入例子。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值