第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

編寫一個(gè)函數(shù),該函數(shù)返回給定字符串中最長(zhǎng)的回文

編寫一個(gè)函數(shù),該函數(shù)返回給定字符串中最長(zhǎng)的回文

例如字符串“ abaccddccefe”中的“ ccddcc”我想到了一個(gè)解決方案,但它的運(yùn)行時(shí)間為O(n ^ 2)算法1:步驟:這是一種蠻力方法對(duì)于i = 1至i小于array.length的2個(gè)for循環(huán),對(duì)于j = i + 1至j小于 array.length的-1這樣,您可以從數(shù)組中獲取所有可能組合的子字符串具有回文功能,可檢查字符串是否為回文因此,對(duì)于每個(gè)子字符串(i,j)都調(diào)用此函數(shù)(如果它是回文)將其存儲(chǔ)在字符串變量中如果找到下一個(gè)回文子字符串,并且該子字符串大于當(dāng)前子字符串,則將其替換為當(dāng)前子字符串。最后,您的字符串變量將得到答案問(wèn)題:1.該算法運(yùn)行時(shí)間為O(n ^ 2)。算法2:反轉(zhuǎn)字符串并將其存儲(chǔ)在不同的數(shù)組中現(xiàn)在找到兩個(gè)數(shù)組之間最大的匹配子字符串但這也需要O(n ^ 2)時(shí)間你們能想到一種運(yùn)行時(shí)間更好的算法嗎?如果可能的話O(n)時(shí)間
查看完整描述

3 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以使用最長(zhǎng)的回文Manacher算法的O(n)時(shí)間!它的實(shí)現(xiàn)可以在這里和這里找到。


對(duì)于輸入,String s = "HYTBCABADEFGHABCDEDCBAGHTFYW1234567887654321ZWETYGDE"它將找到正確的輸出1234567887654321。


查看完整回答
反對(duì) 回復(fù) 2019-10-05
?
尚方寶劍之說(shuō)

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

據(jù)我了解的問(wèn)題,我們可以在中心索引附近找到回文,并在中心的左右兩側(cè)進(jìn)行搜索。鑒于此,并且知道輸入的角落沒有回文,我們可以將邊界設(shè)置為1和length-1。注意字符串的最小和最大邊界時(shí),我們驗(yàn)證對(duì)稱索引位置(右和左)上的字符對(duì)于每個(gè)中心位置是否都相同,直到達(dá)到最大上限中心。


外循環(huán)為O(n)(最多n-2次迭代),內(nèi)循環(huán)為O(n)(最大(n / 2)-1次迭代)


這是我使用其他用戶提供的示例的Java實(shí)現(xiàn)。


class LongestPalindrome {


    /**

     * @param input is a String input

     * @return The longest palindrome found in the given input.

     */

    public static String getLongestPalindrome(final String input) {

        int rightIndex = 0, leftIndex = 0;

        String currentPalindrome = "", longestPalindrome = "";

        for (int centerIndex = 1; centerIndex < input.length() - 1; centerIndex++) {

            leftIndex = centerIndex - 1;  rightIndex = centerIndex + 1;

            while (leftIndex >= 0 && rightIndex < input.length()) {

                if (input.charAt(leftIndex) != input.charAt(rightIndex)) {

                    break;

                }

                currentPalindrome = input.substring(leftIndex, rightIndex + 1);

                longestPalindrome = currentPalindrome.length() > longestPalindrome.length() ? currentPalindrome : longestPalindrome;

                leftIndex--;  rightIndex++;

            }

        }

        return longestPalindrome;

    }


    public static void main(String ... args) {

        String str = "HYTBCABADEFGHABCDEDCBAGHTFYW12345678987654321ZWETYGDE";

        String longestPali = getLongestPalindrome(str);

        System.out.println("String: " + str);

        System.out.println("Longest Palindrome: " + longestPali);

    }

}

其輸出如下:


marcello:datastructures marcello$ javac LongestPalindrome

marcello:datastructures marcello$ java LongestPalindrome

String: HYTBCABADEFGHABCDEDCBAGHTFYW12345678987654321ZWETYGDE

Longest Palindrome: 12345678987654321


查看完整回答
反對(duì) 回復(fù) 2019-10-05
  • 3 回答
  • 0 關(guān)注
  • 902 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)