国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

字符串后面補(bǔ)最短長度的字符,使其整體成回文字符串(java)

這篇具有很好參考價(jià)值的文章主要介紹了字符串后面補(bǔ)最短長度的字符,使其整體成回文字符串(java)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

補(bǔ)齊字符串使其成為回文字符串

給定一個(gè)字符串str,只能在str的后面添加字符,想讓str整體變成回文串,返回至少要添加幾個(gè)字符

Manacher 算法

首先介紹下manacher 算法:
Manacher 算法是一種線性時(shí)間復(fù)雜度的求解最長回文子串的算法。它的核心思想是利用已知回文信息,避免重復(fù)計(jì)算。 Manacher 算法的基本思想是通過預(yù)處理得到一個(gè)包含原字符串所有回文子串的數(shù)組,然后對(duì)于每個(gè)字符,如果它是回文中心,則將它的位置加倍,否則不做任何修改。最后返回?cái)?shù)組中最大的值即可 。具體可以看下上期manacher算法。
Manacher算法 – 回文長度算法
可以先看上期的回文字符串的算法,這個(gè)可以在時(shí)間復(fù)雜度為O(n)的情況下,計(jì)算出最長回文子串的長度。

在這個(gè)題中,我們只需要找到第一次半徑到字符串末尾的字符位置,然后補(bǔ)齊前面到半徑位置的字符,就是需要的最短的字符串。
舉個(gè)例子:
123abcbabc 在這個(gè)字符串中,用manacher 算法中,找到第一次回文半徑到字符末尾的位置字符,也就是倒數(shù)一個(gè)a的位置,然后補(bǔ)齊以a為只心的回文字符前面的字符,也就是ba321.使其整體成為回文字符串。

代碼演示

/**
     * 補(bǔ)齊字符串。
     * @param s
     * @return
     */
    public static String shortestEnd(String s) {
        //只有一個(gè)字符串時(shí),不需要補(bǔ)
        if (s == null || s.length() < 2){
            return null;
        }

        char[] chars = manacherString(s);
        int[] pArr = new int[chars.length];
        int C = 0;
        int R = 0;
        int maxContainsEnd = -1;

        for (int i = 0;i < chars.length;i++){
            pArr[i] = R > i ? Math.min(pArr[2 * C - i],R - i) : 1;

            while (i + pArr[i] < chars.length && i - pArr[i] > -1){
                if (chars[i + pArr[i]] == chars[i - pArr[i]]){
                    pArr[i]++;
                }else {
                    break;
                }
            }
            if (i + pArr[i] > R){
                R = i + pArr[i];
                C = i;
            }
            if (R == chars.length){
                maxContainsEnd = pArr[i];
                break;
            }
        }

        char[] ans = new char[s.length() - maxContainsEnd + 1];
        for (int i = 0; i < ans.length;i++){
            ans[ans.length - i -1] = chars[i * 2 + 1];
        }
        return new String(ans);
    }


        /**
         * 處理字符串
         * @param s
         * @return
         */
    public static char[] manacherString(String s){
        char[] chars = s.toCharArray();
        char[] res = new char[chars.length * 2 + 1];
        int index = 0;
        for (int i = 0; i < res.length;i++){
            res[i] = (i & 1) == 0 ? '#' : chars[index++];
        }
        return res;
    }

Manacher 算法

Manacher算法 – 回文長度算法文章來源地址http://www.zghlxwxcb.cn/news/detail-564446.html

到了這里,關(guān)于字符串后面補(bǔ)最短長度的字符,使其整體成回文字符串(java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 字符串(字節(jié))長度計(jì)算

    字節(jié)(Byte)是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲(chǔ)容量的一種計(jì)量單位,也表示一些計(jì)算機(jī)編程語言中的數(shù)據(jù)類型和語言字符。 一個(gè)字節(jié)(byte)8位(bit),十進(jìn)制表示0~255。 兩個(gè)字節(jié)16位,可表示十進(jìn)制0~65535。 Unicode 做了一件事,就是給世界上所有字符都分配了一個(gè)唯一的數(shù)

    2024年02月05日
    瀏覽(101)
  • C語言:寫一個(gè)函數(shù),求字符串的長度,在main函數(shù)中輸入字符串并輸出其長度(指針)

    C語言:寫一個(gè)函數(shù),求字符串的長度,在main函數(shù)中輸入字符串并輸出其長度(指針)

    分析: ? ?在程序中,定義一個(gè)函數(shù) fix,該函數(shù)使用指針變量來訪問字符串中的每個(gè)字符,并計(jì)算出字符串的長度。fix 函數(shù)的參數(shù)為指向 char 類型的指針變量 p,表示需要計(jì)算長度的字符串。 ? 在主函數(shù) main 中,定義一個(gè)大小為 20 的字符數(shù)組 a,用于存儲(chǔ)輸入的字符串。然

    2024年01月21日
    瀏覽(106)
  • C++ 字符串長度計(jì)算

    C++常用的長度計(jì)算方法size()、sizeof() 、strlen()、length() size():計(jì)算長度,std::string類的成員函數(shù) length():計(jì)算長度,std::string類的成員函數(shù) sizeof():計(jì)算所占用空間的字節(jié)數(shù),是運(yùn)算符;在編譯時(shí)計(jì)算,獲得保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小,因此sizeof不能用來返回

    2024年02月11日
    瀏覽(30)
  • C/C++字符函數(shù)和字符串函數(shù)詳解————長度受限制的字符串函數(shù)

    C/C++字符函數(shù)和字符串函數(shù)詳解————長度受限制的字符串函數(shù)

    個(gè)人主頁:點(diǎn)我進(jìn)入主頁 專欄分類:C語言初階? ? ??C語言程序設(shè)計(jì)————KTV? ? ? ?C語言小游戲? ? ?C語言進(jìn)階 C語言刷題 歡迎大家點(diǎn)贊,評(píng)論,收藏。 一起努力,一起奔赴大廠。 目錄 1.前言? ? ? ?? 2.長度受限制的字符串函數(shù) 2.1strncpy函數(shù) 2.2strncat函數(shù) 2.3strncmp函數(shù)

    2024年02月08日
    瀏覽(90)
  • LeetCode——最小化字符串長度

    LeetCode——最小化字符串長度

    目錄 一、題目 二、題目解讀? 三、代碼? 1、set去重 2、用一個(gè)二進(jìn)制數(shù)記錄每個(gè)字母是否出現(xiàn)過 6462. 最小化字符串長度 - 力扣(Leetcode) 給你一個(gè)下標(biāo)從? 0 ?開始的字符串? s ?,重復(fù)執(zhí)行下述操作? 任意 ?次: 在字符串中選出一個(gè)下標(biāo)? i ?,并使? c ?為字符串下標(biāo)? i

    2024年02月08日
    瀏覽(91)
  • java中壓縮字符串的長度

    在 Java 中,可以使用壓縮算法對(duì)字符串進(jìn)行壓縮,以減少字符串的長度。常見的壓縮算法包括 Gzip、Deflate 和 Bzip2 等。 下面是一個(gè)使用 Gzip 壓縮算法對(duì)字符串進(jìn)行壓縮的示例代碼: 在這個(gè)示例代碼中,我們首先定義了一個(gè)需要壓縮的字符串 originalString 。然后,我們使用 Gzi

    2024年02月16日
    瀏覽(28)
  • 【Python系列】獲取字符串的長度

    【Python系列】獲取字符串的長度

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年04月09日
    瀏覽(23)
  • Java如何求得字符串的長度

    Java如何求得字符串的長度

    在 Java 中,要獲取字符串的長度,可以使用 String 類的 length() 方法 其語法格式: 字符串名.length(); 返回的值是int類型的長度值。 舉例: 1.例如現(xiàn)在接收到了一串字符串,可能接收到的是正常的字符串,也有可能是空字符串,這時(shí)候就需要判斷下字符串是否存在值,就可以使

    2024年02月16日
    瀏覽(143)
  • Python計(jì)算字符串長度的函數(shù)

    1、使用內(nèi)置函數(shù)len 這是Python中一種常用的函數(shù),主要功能就是對(duì)字符串的長度進(jìn)行統(tǒng)計(jì),最后會(huì)返回一個(gè)字符串的實(shí)際長度,使用方法如下: 在示例中str就是一個(gè)要計(jì)算的字符串,它還可以是列表或者是字典等等。 2、使用for循環(huán) 使用for循環(huán)來統(tǒng)計(jì)字符串的長度時(shí),我們可以

    2024年02月13日
    瀏覽(27)
  • Java格式化字符串輸出固定長度,不夠長度空格補(bǔ)全長度

    字串格式化輸出經(jīng)常用到,將字串固定輸出長度可以使用如下方式格式化輸出: 輸出結(jié)果: 你好 ? ? ? ? ? ? ?length16 %-16s :表示輸出固定長度16為,如源字串長度不足16位,-表示右側(cè)補(bǔ)空格至16位; 同樣,如果想實(shí)現(xiàn)固定輸出長度16位,長度不足左側(cè)補(bǔ)空格,可使用%16s。

    2024年02月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包