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

做网站建设的怎么拓展业务郑州网站建设公司

做网站建设的怎么拓展业务,郑州网站建设公司,网站代码优化的方法,永久免费空间服务器算法题目6 - 给定一个字符串,输出其最长的回文子串 1.问题描述 给定一个字符串,输出其最长的回文子串。 回文串特点:正向遍历输出和逆向遍历输出的结果一致。 例如:fabacaba,最长回文子串为abacaba。 输入:fabacaba…

算法题目6 - 给定一个字符串,输出其最长的回文子串

1.问题描述

给定一个字符串,输出其最长的回文子串。
回文串特点:正向遍历输出和逆向遍历输出的结果一致。
例如:fabacaba,最长回文子串为abacaba

输入:fabacaba
输出:abacaba
输入:gfabcdedcbe
输出:bcdedcb

2. 算法解决

2.1 暴力循环法
  • 思路:找到输入字符串的所有子串,判定是否是回文串,如果是回文串,再比较长度,保存最长长度的回文子串。
  • 时间复杂度:O(n^3)
  • 空间复杂度:O(1)
  • 代码如下:
public static String longestPalindrome1(String s) {// 存储结果String result = "";if (s == null || s.isEmpty()) {return result;}if (s.length() < 2) {return s;}// 存储长度int maxLength = 0;for (int i = 0; i < s.length(); i++) {for (int j = i + 1; j < s.length() + 1;j++) {String substring = s.substring(i, j);// 判断是否是回文if (isPalindrome(substring) && substring.length() > maxLength) {result = substring;maxLength = substring.length();}}}return result;}/*** 判断是否是回文* @param str* @return*/public static boolean isPalindrome(String str) {for (int i = 0;i < str.length() / 2; i++) {if (str.charAt(i) != str.charAt(str.length() - i - 1)) {return false;}}return true;}
2.2 中心扩展法(最优解)
  • 思路:假设中心为某个字符或者某个字符和它右边的字符,通过扩展判断该字符序列是否为回文串。 处理奇偶长度回文,以单个字符为中心(奇),或以两个字符中间点为中心(偶)。
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 代码如下:
public static String longestPalindrome2(String s) {String result = "";if (s == null || s.length() < 1) {return "";}for (int i = 0; i < s.length(); i++) {// 奇数回文子串String str1 = dealOddOrEvenNumberStr(s, i, i);// 偶数回文子串String str2 = dealOddOrEvenNumberStr(s, i, i + 1);result = result.length() > str1.length() ? result : str1;result = result.length() > str2.length() ? result : str2;}return result;}/*** 奇偶回文子串处理* @param s* @param left* @param right* @return*/private static String dealOddOrEvenNumberStr(String s, int left, int right) {while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}return s.substring(left + 1, right);}
2.3 动态规划法
  • 思路:动态规划算法,最重要的是找到边界和动态转移方程。
    ①定义状态:dp[i][j]表示s[i…j]是否是回文串,标识字符串s从i到j是否是回文串(左闭右闭)。
    ②边界和状态转移方程:
    • dp[i][j] = true 当 i == j(单字符) 例如:a
    • dp[i][j] = (s[i]==s[j]) 当 j-i ==1(双字符) 例如:aa
    • dp[i][j] = (s[i]==s[j]) && dp[i+1][j-1](多字符)例如:aba

③dp[i][j] = (s[i]==s[j]) && dp[i+1][j-1]解释:
假设现在的回文字符串为 abcba,i = 0, j=4, dp[i][j] = true,s[i] = s[j] = a。
那么去掉i、j上的两个字符后,就是bcb,仍然是一个回文串,相比于原来的字符串,i1 = 1 = i+1, j1 = 3 = j-1。
dp[i][j]为回文串的话,必须满足i <= j ,所以可以得出 i+1 <= j-1 —> j-i >= 2 ,即得 j-i < 2不能为状态转移方程求得,可以得出 dp[i][j]只有一个字符或者空串的情况,即是s[i] = s[j]时,一个字符的和空串一定是个回文串。

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n^2)
  • 代码如下:
public static String longestPalindromeDP3(String s) {if (s == null) {return "";}// 获取字符串长度int length = s.length();if (length < 2) {return s;}// 初始化dp数组boolean[][] dp = new boolean[length][length];// 初始化边界条件,单字符,肯定是回文串for (int i = 0; i < length; i++) {dp[i][i] = true;}// 回文最大长度 初始化为1 即默认单字符为回文串int maxLength = 1;// 回文起始位置int maxStart = 0;// 枚举子串的长度for (int len = 2; len <= length; len++) {for (int i = 0; i < length - len + 1; i++) {// 子串的结束位置int j = i + len - 1;// 判断是否为回文串if (s.charAt(i) == s.charAt(j)) {// 如果是回文串if (len == 2 || dp[i + 1][j - 1]) {// 更新回文串的起始位置和长度dp[i][j] = true;if (len > maxLength) {maxLength = len;maxStart = i;}}}}}// 返回最长回文子串return s.substring(maxStart, maxStart + maxLength);}
}

3. 测试

调用测试:

public class HwTest {public static void main(String[] args) {String s = "gfabcdedcbe";String result1 = longestPalindrome1(s);System.out.println("最长回文子串,暴力循环法结果:" + result1);System.out.println("=====================");String result2 = longestPalindrome2(s);System.out.println("最长回文子串,中心扩展法结果:" + result2);System.out.println("=====================");String result3 = longestPalindromeDP3(s);System.out.println("最长回文子串,动态规划_优化结果:" + result3);}}
  • 暴力循环法输出结果:
    在这里插入图片描述
  • 中心扩展法输出结果:
    在这里插入图片描述
  • 动态规划法输出结果:
    在这里插入图片描述
http://www.dtcms.com/wzjs/149736.html

相关文章:

  • 电子商务网站建设规划论文烟台seo外包
  • 网站跟网页的区别seo优化网站技术排名百度推广
  • 设计制作的基本步骤是什么aso优化
  • 网站建设属于应用软件吗旅游最新资讯 新闻
  • 济南正规网站建设公司哪家好南宁百度推广seo
  • 国建设文化艺术协会网站南宁推广软件
  • wordpress中能搜索到form中的文字吗抖音seo推荐算法
  • react做门户网站搜狗seo软件
  • 乌兰察布盟建设银行网站百度收录检测
  • redis做缓存的网站并发数app开发自学教程
  • win系统做网站深圳搜索竞价账户托管
  • 广州网站建设阿里云成都私人做网站建设
  • 山东川畅信息技术有限公司网站建设百度新闻发布
  • 页面设计需求需要做哪些方面免费网站seo优化
  • 网络广告的特点win10系统优化软件哪个好
  • 在建设银行网站申请完信用卡网站批量收录
  • 美康优选网站怎么做的广告免费发布信息
  • 怎么做系统软件网站西安百度推广网站建设
  • 网站建设源代码怎么搭建b站网站推广
  • 生成网站地图南京疫情最新消息
  • 黑龙江省建设工程招标网站seo整站优化哪家好
  • WordPress可以做社交网站嘛合肥优化
  • 成都倒闭的网站建设公司名单谷歌全球营销
  • 中国十大购物商场排名南宁seo排名首页
  • 网页布局的方法企业seo排名优化
  • 建设网站需要什么基础知识搜索引擎广告优化
  • 深圳java网站开发网站的友情链接是什么意思
  • wordpress 分类图片seo网站排名优化培训教程
  • 电子商务网站建设预算表今日国内新闻头条
  • 网站开发过程及要点线上推广方式都有哪些