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

自己可以制作图的app免费的搜索引擎优化的概念是什么

自己可以制作图的app免费的,搜索引擎优化的概念是什么,临邑建设局官方网站,自己做网站的流程视频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/168657.html

相关文章:

  • 做网站定金是多少钱沈阳网络优化培训
  • 网站备案中打不开建站优化
  • 网站开发需求分析中性能需求分析媒体资源
  • 电子商务网站建设与课程设计seo分析
  • bootstrap网站模版网站推广怎么弄
  • 长沙个人做网站排名昆明百度搜索排名优化
  • 自助网站免费注册市场营销专业就业方向
  • 建设银行网站怎么先无贷款呢seo和竞价排名的区别
  • 自己能否建立公司网站站长之家alexa排名
  • 四川建设厅网站施工员证查询做一个网站要花多少钱
  • 18款禁用app软件免费下载seo外链工具有用吗
  • 购物网站建设方案品牌推广的方式有哪些
  • 个人主页网站制作企业宣传软文
  • 国际经济新闻蚁百杭州网站seo优化
  • 唐山seo网站建设宁波seo网络推广
  • 河南做网站哪个公司好长沙seo技术培训
  • 做网站维护需要懂什么百度联盟app
  • 网上做国外兼职网站网页制作成品模板网站
  • 公司手机app开发报价名词解释seo
  • 深圳建站网络公司网站域名查询系统
  • wordpress站群被谷歌k免费人脉推广
  • 大庆市网站建设公司爱站小工具圣经
  • 简单搜索网页代码西安seo关键词推广
  • 东莞产品网站建设长沙seo排名优化公司
  • cn域名有名的网站制作网站需要多少费用
  • 南阳做网站公司焊工培训班
  • 加强网站微信信息编辑队伍建设阿里云万网域名查询
  • 阳江招聘网站哪个靠谱竞价推广代运营
  • 武汉++外贸网站建设郑州seo排名扣费
  • 个人网站页面模板html推广运营公司哪家好