最长回文子串(中心扩展 c++)

自己敲的代码

#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

int change(string str, int i, int j) {
	// (1)i == st, j == st;
	// (2) i == st, j == st + 1;
	int len = str.size();
	while(str[i] == str[j] && i >= 0 && j < len) {
		i --;
		j ++;
	}
	return j - i -1;
} 
int main()
{
	string str;
	getline(cin, str);
	int len = str.size();
	if(len == 0 ) {
		printf("0");
		return 0;
	}
	int maxLen = 1;
	for(int st = 0; st < len - 1; st ++) {
		int len1 = change(str, st, st + 1);
		int len2 = change(str, st, st);
		maxLen = max(maxLen, max(len1, len2));
	}
	
	printf("%d",maxLen);
 } 

想法

用了getline, 直接输入一整行string, 非常简便, 之前遇到这个问题, 我一般是用c语言的 char 类型数组, 这下方便多了

由于有两个中心, 分别是 A, 和AA 两种类型, 由于用的方法相同, 故在主函数外构造一个新的函数, 直接调用, 简单了很多。

挺简单的, 纯粹自己做。 我记得当初看动态规划之前, 这个问题想了有一个多小时。 就想到奇偶中心问题, 镜像解决, 但是只是模糊的宏观感受, 没有细节, 也不确定。 之后, 在leetcode上用动态规划解决了, 同时发现有Java写的中心扩展, 扫了几眼, 没看懂, 自己想, 5分钟, 在纸上写完思路, 敲完代码, pta测试, 完美通过。

果然要多思考!独立思考!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值