当前位置: 首页 > news >正文

上海网站建设联系电话站长工具网站排名

上海网站建设联系电话,站长工具网站排名,建网站 铸品牌 做推广,做会所网站的最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串。 回文性 如果字符串向前和向后读都相同,则它满足 回文性 子字符串子字符串 是字符串中连续的 非空 字符序列。 动态规划法 class Solution { public:string longestPalindrome(string s) {i…

最长回文子串

给你一个字符串 s,找到 s 中最长的 回文子串。

回文性
如果字符串向前和向后读都相同,则它满足 回文性
子字符串
子字符串 是字符串中连续的 非空 字符序列。

动态规划法

class Solution {
public:string longestPalindrome(string s) {int n = s.size();if (n <= 1) return s;vector<vector<bool>> dp(n, vector<bool>(n, false));int start = 0, maxLen = 1;for (int i = 0; i < n; ++i) dp[i][i] = true;for (int i = 0; i < n - 1; ++i) {if (s[i] == s[i + 1]) {dp[i][i + 1] = true;start = i;maxLen = 2;}}for (int len = 3; len <= n; ++len) {for (int i = 0; i + len - 1 < n; ++i) {int j = i + len - 1;if (s[i] == s[j] && dp[i + 1][j - 1]) {dp[i][j] = true;start = i;maxLen = len;}}}return s.substr(start, maxLen);}
};

首先,我们获取字符串 s 的长度 n。如果字符串长度小于或等于 1,则字符串本身就是回文的(单个字符本身就是回文),直接返回字符串。

dp 是一个二维布尔型数组,dp[i][j] 用来表示子串 s[i...j] 是否为回文串。数组大小为 n x n,初始化为 false

每个单字符子串(即 s[i...i])自然是回文的,因此将 dp[i][i] 设置为 true

接下来,我们处理长度为 2 的子串。如果 s[i] == s[i+1],那么 s[i...i+1] 是回文串,设置 dp[i][i+1] = true。此时,我们还更新 startmaxLen,记录最长回文子串的起始位置和长度。

从长度为 3 的子串开始,我们逐步扩展到更长的回文子串。具体来说,len 表示当前子串的长度,从 3 一直增加到 n

对于每个长度为 len 的子串,我们通过以下条件判断是否为回文:

  • s[i] == s[j]:当前子串的首尾字符相同。
  • dp[i+1][j-1]:即子串 s[i+1...j-1] 是否是回文。

如果这两个条件都成立,那么 s[i...j] 也是回文子串,更新 dp[i][j] = true,并更新 startmaxLen,记录当前最长回文子串的起始位置和长度。

输入字符串 s = "babad"

  • 长度为 1 的子串:我们从一开始就知道每个单独的字符都是一个回文子串,所以 dp[i][i] = true 对于所有 i 都成立。对于 s = "babad",初始化时,dp 数组是这样的:

dp = [ [true, false, false, false, false], [false, true, false, false, false], [false, false, true, false, false], [false, false, false, true, false], [false, false, false, false, true] ]

  • 长度为 2 的子串:接着,代码检查相邻的字符是否相同。如果相同,设置 dp[i][i+1] = true。在 s = "babad" 中,s[0] != s[1]b != a),s[1] != s[2]a != b),s[2] != s[3]b != a),s[3] != s[4]a != d)。所以 dp 数组没有更新。

dp 仍然是:

dp = [ [true, false, false, false, false], [false, true, false, false, false], [false, false, true, false, false], [false, false, false, true, false], [false, false, false, false, true] ]

  • 长度为 3 及以上的回文子串:接着,程序检查长度为 3 及以上的子串,逐步扩展回文子串的长度。对每一个 len(长度从 3 到 n),我们依次检查每个子串的起始位置 i

    • len = 3

      • 对于 s[0...2] = "bab"s[0] == s[2]b == b),并且 dp[1][1] = true(即 "a" 是回文)。所以 dp[0][2] = truestart = 0maxLen = 3
      • 现在 dp 数组更新为:

      dp = [ [true, false, true, false, false], [false, true, false, false, false], [false, false, true, false, false], [false, false, false, true, false], [false, false, false, false, true] ]

      这时,我们已经找到了 "bab" 作为一个回文子串。

  • 继续检查更长的回文子串:

    • len = 4
      • 对于 s[1...4] = "abad"s[1] != s[4]a != d),所以 dp[1][4] 不会被设置。
    • len = 5
      • 对于 s[0...4] = "babad"s[0] != s[4]b != d),所以 dp[0][4] 也不会被设置。

经过这些步骤,程序最终会返回最长的回文子串 "bab",因为 start = 0maxLen = 3

http://www.tj-hxxt.cn/news/43918.html

相关文章:

  • 网站备案为什么要关闭什么叫百度竞价推广
  • 济南哪家网站技术比较高广西网站seo
  • c 网站开发案例详解百度云seo优化知识
  • 怎么注册晋江网站做的推广产品的软文
  • 电子商务网站建站目的信息流广告是什么
  • 59网一起做网站制作网页完整步骤代码
  • 做办公室的网站关键词查询工具包括哪些
  • 胶南网站建设多少钱在线建站网页制作网站建设平台
  • 网站关键词代码怎么做如何设置友情链接
  • 河北建设银行官网招聘网站怎么建造自己的网站
  • 做婚纱网站的图片大全经典营销案例100例
  • 电子商务网站首页设计申请网站域名要多少钱
  • 做招标代理应关注的网站搜索关键词网站
  • 手机创建网站的软件优帮云排名自动扣费
  • 网站设置会员好网站制作公司
  • 如何做网站短链接搜索引擎优化的方法与技巧
  • 飞凡 做电商网站今日新闻 最新消息 大事
  • wordpress如何调用标签北京搜索排名优化
  • wordpress子站点404本地推广平台有哪些
  • 个人网站怎么做引流为什么外包会是简历污点
  • wordpress繁體模板百度优化大师
  • 做网站的公司 苏迪公司推广策划方案
  • 1空间做2个网站网站推广基本方法是
  • 用什么做网站最简单免费检测网站seo
  • 去哪找网站建设公司好上海专业seo公司
  • 代做网页制作网站百度打开百度搜索
  • 时尚大气网站设计优化大师如何删掉多余的学生
  • 做电力公司网站seoer是什么意思
  • php可视化网站开发工具福州网站seo优化公司
  • 东莞做购物网站宁德市房价