LeetCode 5. Longest Palindromic Substring

Given a string s, return the longest palindromic substring in s.

Example 1:

复制Input: s = "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: s = "cbbd"
Output: "bb"

Example 3:

Input: s = "a"
Output: "a"

Example 4:

Input: s = "ac"
Output: "a"

Constraints:

1 <= s.length <= 1000
s consist of only digits and English letters (lower-case and/or upper-case),

实现思路:

本题的方法有很多,其中暴力方法肯定是最差的,还有就是采用动态规划的方法,这里笔者用的是中心扩散方法去实现,具体方法就是每到一个字符就向两边进行延伸张,其中延伸的情况有奇延伸和偶延伸,具体的情况就是中心结点是一个和中心结点为两个的情况:
如果是总结点数为奇数的回文子串那么只有对称中心的结点是不同的,但总结点为偶数的回文子串那则是所有两边的结点都是对称的。

AC代码:

class Solution {
		string findAns(string s,int left,int right) {
			int i=left,j=right,size=s.length();
			while(i>=0&&j<size) {//进行中心扩散的策略
				if(s[i]==s[j]) {
					i--;//向两边扩散
					j++;
				} else break;
			}
			return s.substr(i+1,j-i-1);
		}

	public:
		string longestPalindrome(string s) {
			int size=s.length();
			if(size<2) return s;
			string ans;
			for(int i=0; i<size-1; i++) {
				string odd=findAns(s,i,i),even=findAns(s,i,i+1);//同时进行奇扩散和偶扩散
				string res=odd.size()>even.size()?odd:even;//保存奇扩散和偶扩散中得到长度较大的回文串
				if(res.size()>ans.size()) {
					ans=res;
				}
			}
			return ans;
		}
};
posted @   coderJ_ONE  阅读(36)  评论(0)    收藏  举报
编辑推荐:
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
阅读排行:
· 工良出品 | 长文讲解 MCP 和案例实战
· 多年后再做Web开发,AI帮大忙
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· centos停服,迁移centos7.3系统到新搭建的openEuler
· 上周热点回顾(4.14-4.20)
点击右上角即可分享
微信分享提示