最长回文串--动态规划
生活随笔
收集整理的這篇文章主要介紹了
最长回文串--动态规划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最長回文串–動態規劃
參考:https://writings.sh/post/algorithm-longest-palindromic-substring
class Solution {public String longestPalindrome(String s) {int len = s.length();//為了操作方便,將string變char[]char[] str = s.toCharArray();//創建數組,數組下標為回文串結束,數組內容為回文串開始//如: dp[j] = i; j為回文串結束下標,i為回文串開始下標int[] dp = new int[len];dp[0] = 0;//記錄最長回文串的dp下標int max_index = 0;for(int j = 1 ;j < len;j++){//兩種情況//情況一:以j結束的回文串剛好是以j-1結束回味串的擴展,即使dp[j] = dp[j-1] -1if(dp[j-1]>0 && str[j]==str[dp[j-1]-1])dp[j] = dp[j-1] - 1;//情況二:不符合擴展,就要找以j結尾的回文串else{int right = j;int left = dp[j-1];int start = left;while(left < right ){if(str[left] != str[right]){start = left +1;right = j;}else{right--;}left++;}dp[j] = start;}int max_len = max_index-dp[max_index]+1;if(max_len < j-dp[j]+1)max_index = j;}return s.substring(dp[max_index],max_index+1);} }總結
以上是生活随笔為你收集整理的最长回文串--动态规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用鼠标右键可以打开如何使用电脑鼠标右键
- 下一篇: docker 不挂断创建容器