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

浙江省建设部网站百度信息流投放

浙江省建设部网站,百度信息流投放,用手机怎么看自己做的网站,吕子乔做网站吹的语录目录0、题目1、第一个官方答案1.1 动态规划(未懂)1.2 中心扩展(已懂)1.3 Manacher(未懂)2、第二个参考答案2.1 暴力求法(已懂)2.2 反转法(未懂)2.3 动态规划&…

目录

  • 0、题目
  • 1、第一个官方答案
    • 1.1 动态规划(未懂)
    • 1.2 中心扩展(已懂)
    • 1.3 Manacher(未懂)
  • 2、第二个参考答案
    • 2.1 暴力求法(已懂)
    • 2.2 反转法(未懂)
    • 2.3 动态规划(未懂)
    • 2.4 中心扩展(已懂)

0、题目

题目链接:【0005】最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

1、第一个官方答案

链接

视频中的暴力解法是java代码,仅供一瞥~

class Solution {
public:string longestPalindrome(string s) {int len = s.length();if (len < 2) {return s;}int maxLen = 1;int begin = 0;// s.charAt(i) 每次都会检查数组下标越界,因此先转换成字符数组,这一步非必须char[] charArray = s.toCharArray();// 枚举所有长度严格大于1的子串 charArray[i..j]for (int i = 0; i < len - 1; i++) {for (int j = i + 1; j < len; j++) {if (j - i + 1 > maxLen && validPalindromic(charArray, i, j)) {maxLen = j - i + 1;begin = i;}}}return s.substring(begin, begin + maxLen);}private:bool validPalindromic(char[] charArray, int left, int right) {while (left < right) {if (charArray[left] != charArray[right]) {return false;}left+1;right-1;}return true;}
};

1.1 动态规划(未懂)

从视频05:35开始

#include <iostream>
#include <string>
#include <vector>using namespace std;class Solution {
public:string longestPalindrome(string s) {int n = s.size();if (n < 2) {return s;}int maxLen = 1;int begin = 0;// dp[i][j] 表示 s[i..j] 是否是回文串vector<vector<int>> dp(n, vector<int>(n));// 初始化:所有长度为 1 的子串都是回文串for (int i = 0; i < n; i++) {dp[i][i] = true;}// 递推开始// 先枚举子串长度for (int L = 2; L <= n; L++) {// 枚举左边界,左边界的上限设置可以宽松一些for (int i = 0; i < n; i++) {// 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得int j = L + i - 1;// 如果右边界越界,就可以退出当前循环if (j >= n) {break;}if (s[i] != s[j]) {dp[i][j] = false;} else {if (j - i < 3) {dp[i][j] = true;} else {dp[i][j] = dp[i + 1][j - 1];}}// 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置if (dp[i][j] && j - i + 1 > maxLen) {maxLen = j - i + 1;begin = i;}}}return s.substr(begin, maxLen);}
};

1.2 中心扩展(已懂)

从视频01:55开始

class Solution {
public:pair<int, int> expandAroundCenter(const string& s, int left, int right) {while (left >= 0 && right < s.size() && s[left] == s[right]) {--left;++right;}return {left + 1, right - 1};}string longestPalindrome(string s) {int start = 0, end = 0;for (int i = 0; i < s.size(); ++i) {auto [left1, right1] = expandAroundCenter(s, i, i);auto [left2, right2] = expandAroundCenter(s, i, i + 1);if (right1 - left1 > end - start) {start = left1;end = right1;}if (right2 - left2 > end - start) {start = left2;end = right2;}}return s.substr(start, end - start + 1);}
};

1.3 Manacher(未懂)

class Solution {
public:int expand(const string& s, int left, int right) {while (left >= 0 && right < s.size() && s[left] == s[right]) {--left;++right;}return (right - left - 2) / 2;}string longestPalindrome(string s) {int start = 0, end = -1;string t = "#";for (char c: s) {t += c;t += '#';}t += '#';s = t;vector<int> arm_len;int right = -1, j = -1;for (int i = 0; i < s.size(); ++i) {int cur_arm_len;if (right >= i) {int i_sym = j * 2 - i;int min_arm_len = min(arm_len[i_sym], right - i);cur_arm_len = expand(s, i - min_arm_len, i + min_arm_len);} else {cur_arm_len = expand(s, i, i);}arm_len.push_back(cur_arm_len);if (i + cur_arm_len > right) {j = i;right = i + cur_arm_len;}if (cur_arm_len * 2 + 1 > end - start) {start = i - cur_arm_len;end = i + cur_arm_len;}}string ans;for (int i = start; i <= end; ++i) {if (s[i] != '#') {ans += s[i];}}return ans;}
};

2、第二个参考答案

链接
估计和前面有些重复,搞清楚后需要予以精简!

2.1 暴力求法(已懂)

class Solution {
public:string longestPalindrome(string s) {string res="";//存放结果string temp="";//存放子串for(int i=0;i<s.length();i++){for(int j=i;j<s.length();j++){temp=temp+s[j];string tem=temp;//tem存放子串反转结果std::reverse(tem.begin(),tem.end());//反转if(temp==tem)res=res.length()>temp.length()?res:temp;}temp="";}return res;}
};

2.2 反转法(未懂)

class Solution {
public:string longestPalindrome(string s) {if(s.length()==1) return s;//大小为1的字符串必为回文串string rev=s;//rev存放s反转结果string res;//存放结果std::reverse(rev.begin(),rev.end());if(rev==s) return s;int len=0;//存放回文子串的长度for(int i=0;i<s.length();i++)//查找s与rev的最长公共子串{string temp;//存放待验证子串for(int j=i;j<s.length();j++){temp=temp+s[j];if(len>=temp.length())continue;else if(rev.find(temp)!=-1)//在rev中找到temp{string q=temp;//q用来验证temp是否是回文子串std::reverse(q.begin(),q.end());if(q==temp){len=temp.length();res=temp;}}else break;}temp="";}return res;}
};

2.3 动态规划(未懂)

class Solution {
public:string longestPalindrome(string s) {int len=s.size();if(len==0||len==1)return s;int start=0;//回文串起始位置int max=1;//回文串最大长度vector<vector<int>>  dp(len,vector<int>(len));//定义二维动态数组for(int i=0;i<len;i++)//初始化状态{dp[i][i]=1;if(i<len-1&&s[i]==s[i+1]){dp[i][i+1]=1;max=2;start=i;}}for(int l=3;l<=len;l++)//l表示检索的子串长度,等于3表示先检索长度为3的子串{for(int i=0;i+l-1<len;i++){int j=l+i-1;//终止字符位置if(s[i]==s[j]&&dp[i+1][j-1]==1)//状态转移{dp[i][j]=1;start=i;max=l;}}}return s.substr(start,max);//获取最长回文子串}
};

2.4 中心扩展(已懂)

class Solution {
public:string longestPalindrome(string s) {int len=s.size();if(len==0||len==1)return s;int start=0;//记录回文子串起始位置int end=0;//记录回文子串终止位置int mlen=0;//记录最大回文子串的长度for(int i=0;i<len;i++){int len1=expendaroundcenter(s,i,i);//一个元素为中心int len2=expendaroundcenter(s,i,i+1);//两个元素为中心mlen=max(max(len1,len2),mlen);if(mlen>end-start+1){start=i-(mlen-1)/2;end=i+mlen/2;}}return s.substr(start,mlen);//该函数的意思是获取从start开始长度为mlen长度的字符串}
private:int expendaroundcenter(string s,int left,int right)//计算以left和right为中心的回文串长度{int L=left;int R=right;while(L>=0 && R<s.length() && s[R]==s[L]){L--;R++;}return R-L-1;}
};
http://www.wooajung.com/news/32345.html

相关文章:

  • 网站建设与管理实践心得泉州百度网络推广
  • 我想在阿里巴巴做卫生纸的网站海外市场推广做什么的
  • 酒店门户网站建设背景武汉网站开发公司seo
  • 完善旅游网站建设谷歌浏览器官网下载安装
  • 返利网一类的网站怎么做重庆网站seo服务
  • 珠海做网站方案推广软文范文800字
  • logo怎么注册seo关键词排名网络公司
  • 禹城做网站重庆seo网站建设
  • 杨凌网站建设推广网络营销的发展现状如何
  • 网站建设 doc深圳网络推广代运营
  • 厦门网站建设公司怎么选如何让别人在百度上搜到自己公司
  • 新闻网站怎样做seo优化可口可乐软文营销案例
  • 完全免费空间网站微信营销推广软件
  • 青岛专业网站建设推广报价写文章一篇30元兼职
  • 如何做免费的公司网站关键词优化软件排行
  • 买网站去哪买神马seo服务
  • 国外做多媒体展览的网站郑州seo阿伟
  • 淄博企业建网站网络推广公司网站
  • 网站开发行业新闻地推平台
  • 手机网站微信支付接口开发教程百度应用搜索
  • 房产o2o网站建设凡科建站手机版登录
  • 网站定制报价表免费引流推广工具
  • 中小企业网站建设报告ai智能搜索引擎
  • 青岛网站建设在哪近三天的国内新闻
  • 小程序怎么做优惠券网站杭州seo建站
  • 新型干法水泥工艺设计计算及实用技术 久久建筑网汕头seo外包机构
  • 公司网站百度搜索的描述怎么做百度如何投放广告
  • 电子商务公司营业执照经营范围seo网络推广有哪些
  • dede游戏网站模板it培训机构学费一般多少
  • 网站视频播放代码windows优化大师怎么卸载