溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何編寫代碼實現(xiàn)一個字符串的最長回文子序列

發(fā)布時間:2021-10-14 15:35:20 來源:億速云 閱讀:125 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“如何編寫代碼實現(xiàn)一個字符串的最長回文子序列”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

import java.util.Arrays;

/**
 * @author pxu
 * @create 2021/4/7-5:57 下午
 */
public class Nc154 {
    

    public int longestPalindromeSubSeq (String s) {

        int n = s.length();
        /**
         * 在for循環(huán)運行過程中,dp[j]中的數(shù)據(jù)代表s從i到j(luò)的子串中的最長回文序列的長度
         * 在for運行結(jié)束后,dp[j]中的數(shù)據(jù)代表s從0到j(luò)的子串中的最長回文序列的長度,所
         * 以程序最后返回的結(jié)果就是dp[n-1]的值。
         */
        int[] dp = new int[n];

        /**
         * 填充為1的原因是,每一個字符都是一個長度為1的回文串
         */
        Arrays.fill(dp,1);

        for (int i = n-2;i>=0;i--) {

            /**
             * pre總是代表在字符串s從i+1到j(luò)-1的子串的最長的回文序列的長度,所以其初始值被設(shè)置為0
             */
            int pre=0;
            for (int j=i+1;j<n;j++) {
                /**
                 * 因為第i個字符可能會和第j個字符結(jié)合成回文對,導(dǎo)致原有dp[j]_old的值變?yōu)樵赿p[j-1]基礎(chǔ)上
                 * 增加2形成新的dp[j]_new,但是如果第i個字符也可以和第j+1個字符結(jié)合成回文對,這時候
                 * 對于第j+1個字符來說,第j個字符是沒有和第i個字符結(jié)合的(因為第i個字符,只能和后面的一個字符結(jié)合)
                 * ,所以dp[j+1]的新值應(yīng)該是dp[j]的舊值的基礎(chǔ)上增加2得到。所以每次進入循環(huán)的時候需要把dp[j]的值
                 * 記錄在temp變量中,在本次循環(huán)結(jié)束之前,將值傳遞給pre,以便于在下一次循環(huán)中如果下一個字符也可以
                 * 和第i個字符結(jié)合時,更新dp中的值
                 */
                int temp = dp[j];
                if (s.charAt(i) == s.charAt(j)) {
                    dp[j] = pre + 2;
                }else {
                    dp[j] = Math.max(dp[j],dp[j-1]);
                }

                pre = temp;
            }
        }
        return dp[n-1];

    }

}

“如何編寫代碼實現(xiàn)一個字符串的最長回文子序列”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI