欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(647.回文子字符串)

 更新時間:2021年07月09日 15:22:05   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(647.回文子字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 647. Palindromic Substrings 回文子字符串

Given a string, your task is to count how many palindromic substrings in this string.

The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.

Example 1:

Input: "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".

Example 2:

Input: "aaa"
Output: 6
Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".

Note:

  1. The input string length won't exceed 1000.

這道題給了一個字符串,讓我們計算有多少個回文子字符串。博主看到這個題,下意識的想著應(yīng)該是用 DP 來做,哼哼哧哧寫了半天,修修補補,終于通過了,但是博主寫的 DP 不是最簡便的方法,略顯復(fù)雜,這里就不貼了。還是直接講解大神們的解法好了。其實這道題也可以用遞歸來做,而且思路非常的簡單粗暴。就是以字符串中的每一個字符都當作回文串中間的位置,然后向兩邊擴散,每當成功匹配兩個左右兩個字符,結(jié)果 res 自增1,然后再比較下一對。注意回文字符串有奇數(shù)和偶數(shù)兩種形式,如果是奇數(shù)長度,那么i位置就是中間那個字符的位置,所以左右兩遍都從i開始遍歷;如果是偶數(shù)長度的,那么i是最中間兩個字符的左邊那個,右邊那個就是 i+1,這樣就能 cover 所有的情況啦,而且都是不同的回文子字符串,參見代碼如下:

解法一:

class Solution {
public:
    int countSubstrings(string s) {
        if (s.empty()) return 0;
        int n = s.size(), res = 0;
        for (int i = 0; i < n; ++i) {
            helper(s, i, i, res);
            helper(s, i, i + 1, res);
        }
        return res;
    }
    void helper(string s, int i, int j, int& res) {
        while (i >= 0 && j < s.size() && s[i] == s[j]) {
            --i; ++j; ++res;
        }
    }
};

在剛開始的時候博主提到了自己寫的 DP 的方法比較復(fù)雜,為什么呢,因為博主的 dp[i][j] 定義的是范圍 [i, j] 之間的子字符串的個數(shù),這樣其實還需要一個二維數(shù)組來記錄子字符串 [i, j] 是否是回文串,那還不如直接就將 dp[i][j] 定義成子字符串 [i, j] 是否是回文串就行了,然后i從 n-1 往0遍歷,j從i往 n-1 遍歷,然后看 s[i] 和 s[j] 是否相等,這時候需要留意一下,有了 s[i] 和 s[j] 相等這個條件后,i和j的位置關(guān)系很重要,如果i和j相等了,則 dp[i][j] 肯定是 true;如果i和j是相鄰的,那么 dp[i][j] 也是 true;如果i和j中間只有一個字符,那么 dp[i][j] 還是 true;如果中間有多余一個字符存在,則需要看 dp[i+1][j-1] 是否為 true,若為 true,那么 dp[i][j] 就是 true。賦值 dp[i][j] 后,如果其為 true,結(jié)果 res 自增1,參見代碼如下:

解法二:

class Solution {
public:
    int countSubstrings(string s) {
        int n = s.size(), res = 0;
        vector<vector<bool>> dp(n, vector<bool>(n));
        for (int i = n - 1; i >= 0; --i) {
            for (int j = i; j < n; ++j) {
                dp[i][j] = (s[i] == s[j]) && (j - i <= 2 || dp[i + 1][j - 1]);
                if (dp[i][j]) ++res;
            }
        }
        return res;
    }
};

到此這篇關(guān)于C++實現(xiàn)LeetCode(647.回文子字符串)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)回文子字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)簡單的希爾排序Shell Sort實例

    C++實現(xiàn)簡單的希爾排序Shell Sort實例

    這篇文章主要介紹了C++實現(xiàn)簡單的希爾排序Shell Sort實例,對于正在學(xué)習(xí)算法的朋友很有借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C語言報錯:Buffer Overflow的原因和解決辦法

    C語言報錯:Buffer Overflow的原因和解決辦法

    Buffer Overflow是C語言中常見且危險的內(nèi)存錯誤之一,它通常在程序試圖向緩沖區(qū)(如數(shù)組或內(nèi)存塊)寫入超過其容量的數(shù)據(jù)時發(fā)生,本文將詳細介紹Buffer Overflow的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下
    2024-07-07
  • C語言實現(xiàn)簡單通訊錄系統(tǒng)

    C語言實現(xiàn)簡單通訊錄系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單通訊錄系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 深入了解c++11 移動語義與右值引用

    深入了解c++11 移動語義與右值引用

    這篇文章主要介紹了c++ 移動語義與右值引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • websocket++簡單使用及實例分析

    websocket++簡單使用及實例分析

    下面小編就為大家?guī)硪黄獁ebsocket++簡單使用及實例分析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 對比分析C語言中的gcvt()和ecvt()以及fcvt()函數(shù)

    對比分析C語言中的gcvt()和ecvt()以及fcvt()函數(shù)

    這篇文章主要介紹了對比分析C語言中的gcvt和ecvt以及fcvt函數(shù),都是將數(shù)字轉(zhuǎn)化為字符串,注意其之間的功能區(qū)別,需要的朋友可以參考下
    2015-08-08
  • C++ 中this指針的用途詳解

    C++ 中this指針的用途詳解

    這篇文章主要給大家介紹了關(guān)于C++ 中this指針的用途,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • C++實現(xiàn)基于靜態(tài)數(shù)組的順序表

    C++實現(xiàn)基于靜態(tài)數(shù)組的順序表

    這篇文章主要介紹了C++實現(xiàn)基于靜態(tài)數(shù)組的順序表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++實現(xiàn)將輸入的內(nèi)容輸出到文本文件

    C++實現(xiàn)將輸入的內(nèi)容輸出到文本文件

    這篇文章主要介紹了C++實現(xiàn)將輸入的內(nèi)容輸出到文本文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 詳解C++ STL vector容量(capacity)和大小(size)的區(qū)別

    詳解C++ STL vector容量(capacity)和大小(size)的區(qū)別

    這篇文章主要介紹了詳解C++ STL vector容量(capacity)和大小(size)的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論