package string; import java.util.Arrays; /** * @ProjectName: leetcode * @Package: string * @ClassName: String5 * @Author: markey * @Description:5. æé¿åæå串 * ç»å®ä¸ä¸ªå符串 sï¼æ¾å° s 䏿é¿çåæå串ãä½ å¯ä»¥å设 s çæå¤§é¿åº¦ä¸º 1000ã * * ç¤ºä¾ 1ï¼ * * è¾å ¥: "babad" * è¾åº: "bab" * 注æ: "aba" 乿¯ä¸ä¸ªææçæ¡ã * ç¤ºä¾ 2ï¼ * * è¾å ¥: "cbbd" * è¾åº: "bb" * * æ¥æºï¼åæ£ï¼LeetCodeï¼ * 龿¥ï¼https://leetcode-cn.com/problems/longest-palindromic-substring * è使å½é¢æ£ç½ç»ææãåä¸è½¬è½½è¯·èç³»å®æ¹ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã * @Date: 2020/5/1 17:23 * @Version: 1.0 */ public class String5 { public static void main(String[] args) { String res = longestPalindrome("cbbd"); System.out.println(res); } /** * 卿è§å dp[i][j]表示s.substring(j,i+1)æ¯å¦æ¯åæåç¬¦ä¸²ï¼ * ådp[i][j] = dp[i-1][j+1] && s.charAt(j) == s.charAt(i) * */ public static String longestPalindrome(String s) { String res = ""; int[][] dp = new int[s.length()][s.length()]; // ææå¯è½æ¯å符串éå,1表示åæï¼0表示ä¸åæ for (int i = 0; i < s.length(); i++) { for (int j = 0; j <= i; j++) { if (i == j) { dp[i][j] = 1; res = res.length() < i - j + 1 ? s.substring(j, i + 1) : res; // åæé¿åæå串 continue; } if (s.charAt(i) == s.charAt(j)) { if (j + 1 > i - 1) { // è¿ç§æ åµå ¶å®iåjç¸é»äºï¼æ³æ³iåjç¸é»ï¼å¹¶ä¸ä»ä»¬åç¬¦ä¸æ ·ï¼é£è¯å®æ¯é¿åº¦ä½2çåæå串 dp[i][j] = 1; res = res.length() < i - j + 1 ? s.substring(j, i + 1) : res; // åæé¿åæå串 continue; } if (dp[i-1][j+1] == 1) { dp[i][j] = 1; res = res.length() < i - j + 1 ? s.substring(j, i + 1) : res; // åæé¿åæå串 continue; } } else { dp[i][j] = 0; } } } for (int i = 0; i < dp.length; i++) { System.out.println(Arrays.toString(dp[i])); } return res; } }