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

自己可以制作图的app免费的广西网络优化seo

自己可以制作图的app免费的,广西网络优化seo,找设计方案的网站,容桂网站制作价位1、647. 回文子串 子串是连续的。 可以往外扩展找回文子串 布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。 当s[i]与s[j]不相等,那没…

1、647. 回文子串

子串是连续的。

可以往外扩展找回文子串

布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。

当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。

当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况

  • 情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串
  • 情况二:下标i 与 j相差为1,例如aa,也是回文子串
  • 情况三:下标:i 与 j相差大于1的时候,例如cabac,此时s[i]与s[j]已经相同了,我们看i到j区间是不是回文子串就看aba是不是回文就可以了,那么aba的区间就是 i+1 与 j-1区间,这个区间是不是回文就看dp[i + 1][j - 1]是否为true。

 所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的

// 动态规划的思路
// func countSubstrings(s string) int {
//     if len(s) == 0 {
//         return 0
//     }
//     result := 0
//     dp := make([][]bool, len(s))
//     for i := 0; i < len(s); i++ {
//         dp[i] = make([]bool, len(s))
//     }
//     for i := len(s) - 1; i >= 0; i-- {  // [i, j]区间内的子串是否是回文子串
//         for j := i; j < len(s); j++ {
//             if s[i] == s[j] {
//                 if j - i <= 1 {
//                     result++
//                     dp[i][j] = true
//                 }else if dp[i + 1][j - 1] {
//                     result++
//                     dp[i][j] = true
//                 }
//             }
//         }
//     }
//     return result
// }// 中心扩展法,双指针
func countSubstrings(s string) int {if len(s) == 0 {return 0}result := 0for i := 0; i < len(s); i++ {// 子串长度奇数个for left, right := i, i; left >= 0 && right < len(s) && s[left] == s[right]; {result++left--right++}// 子串长度偶数个for left, right := i, i + 1; left >= 0 && right < len(s) && s[left] == s[right]; {result++left--right++} }return result
}

516.最长回文子序列

回文子串是要连续的,回文子序列可不是连续的!

这是不连续的

  1. 确定dp数组(dp table)以及下标的含义

dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]

  1. 确定递推公式

在判断回文子串的题目中,关键逻辑就是看s[i]与s[j]是否相同。

如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;

如图: 

516.最长回文子序列

(如果这里看不懂,回忆一下dp[i][j]的定义)

如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。

加入s[j]的回文子序列长度为dp[i + 1][j]。

加入s[i]的回文子序列长度为dp[i][j - 1]。

那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);

从递归公式中,可以看出,dp[i][j] 依赖于 dp[i + 1][j - 1] ,dp[i + 1][j] 和 dp[i][j - 1],如图:

所以遍历i的时候一定要从下到上遍历,这样才能保证下一行的数据是经过计算的

j的话,可以正常从左向右遍历。

最后的结果返回一定是dp[0][len(s) - 1],表示区间【0, len(s) - 1】

func longestPalindromeSubseq(s string) int {if len(s) <= 1 {return len(s)}dp := make([][]int, len(s))// dp数组表示[i, j]区间之间的最长回文子序列长度for i := 0; i < len(s); i++ {dp[i] = make([]int, len(s))}for i := 0; i < len(s); i++ {dp[i][i] = 1}for i := len(s) - 1; i >= 0; i-- {for j := i + 1; j < len(s); j++ {if s[i] == s[j] {dp[i][j] = dp[i + 1][j - 1] + 2}else {dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])}}}return dp[0][len(s) - 1]// 区间[0, len(s) - 1]
}

http://www.dtcms.com/wzjs/314835.html

相关文章:

  • 求网站建设规划广州王牌seo
  • 门户网站开发报价友情链接的形式
  • wordpress nginx 乱码seo快速优化文章排名
  • 淘宝优惠劵网站怎么做百度seo点击软件
  • go和java做网站种子搜索神器在线引擎
  • 做网站获取ip最新seo新手教程
  • 小说阅读网站开发视频贵阳百度seo点击软件
  • 徐州网站制作机构seo兼职
  • wordpress 提交表单手机关键词seo排名优化
  • 做系统之前的网站收藏在哪里找微信怎么做推广
  • vue怎么做网站百度首页清爽版
  • 学网站开发c新闻网站排行榜
  • 上传图片做网站维护环球网最新消息
  • 苏州保洁公司哪家最好上海企业优化
  • 做外贸公司网站杭州seo搜索引擎优化公司
  • 高端网站有哪些怎么做好网站方式推广
  • 网站都有备案号吗石家庄网络营销网站推广
  • 网站建设的教学网站58同城网站推广
  • 站内搜索本网站怎么做搜索引擎营销的特点是什么
  • wordpress引用js代码seo搜索引擎优化就业指导
  • 网站收录系统百度旗下的所有产品
  • html语言大型网站开发seo工具有哪些
  • 宁波网络营销策划公司漯河搜狗关键词优化排名软件
  • 企业建网站公司多少钱西安企业网站seo
  • 网站建站网站设计公司百度热词
  • 广州高端品牌网站建设哪家公司好seo文章范文
  • app小程序开发团队惠州seo代理
  • 许昌做网站公司报价网络营销活动策划方案模板
  • 小程序怎么推广引流班级优化大师
  • 购买空间网站哪个好三只松鼠网络营销案例分析