最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

[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.

這道題給了一個字符串,讓我們計算有多少個回文子字符串。博主看到這個題,下意識的想著應該是用 DP 來做,哼哼哧哧寫了半天,修修補補,終于通過了,但是博主寫的 DP 不是最簡便的方法,略顯復雜,這里就不貼了。還是直接講解大神們的解法好了。其實這道題也可以用遞歸來做,而且思路非常的簡單粗暴。就是以字符串中的每一個字符都當作回文串中間的位置,然后向兩邊擴散,每當成功匹配兩個左右兩個字符,結果 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 的方法比較復雜,為什么呢,因為博主的 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的位置關系很重要,如果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,結果 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;
    }
};

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

相關文章

  • C語言鏈表完整操作演示

    C語言鏈表完整操作演示

    這篇文章主要為大家詳細介紹了C語言鏈表的完整操作演示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語言利用棧實現(xiàn)對后綴表達式的求解

    C語言利用棧實現(xiàn)對后綴表達式的求解

    這篇文章主要為大家詳細介紹了C語言利用棧實現(xiàn)對后綴表達式的求解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言中system()執(zhí)行cmd命令打開關閉程序的方法

    C語言中system()執(zhí)行cmd命令打開關閉程序的方法

    今天小編就為大家分享一篇C語言中system()執(zhí)行cmd命令打開關閉程序的方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • C語言實現(xiàn)鏈表與文件存取的示例代碼

    C語言實現(xiàn)鏈表與文件存取的示例代碼

    這篇文章主要和大家分享C語言實現(xiàn)鏈表與文件存取的示例代碼,可以實現(xiàn)建立鏈表,然后把鏈表數(shù)據(jù)存儲到文件中,然后把文件數(shù)據(jù)存儲到數(shù)組中并輸出,感興趣的可以學習一下
    2022-04-04
  • C語言中sizeof()與strlen()函數(shù)的使用入門及對比

    C語言中sizeof()與strlen()函數(shù)的使用入門及對比

    這篇文章主要介紹了C語言中sizeof()與strlen()函數(shù)的使用入門及對比,同時二者在C++中的使用情況也基本上同理,是需要的朋友可以參考下
    2015-12-12
  • 函數(shù)指針的強制類型轉換實現(xiàn)代碼

    函數(shù)指針的強制類型轉換實現(xiàn)代碼

    函數(shù)指針的強制類型轉換實現(xiàn)代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Visual studio setup.exe 安裝vs2022報錯的解決方案

    Visual studio setup.exe 安裝vs2022報錯的解決方案

    這篇文章主要介紹了Visual studio setup.exe 安裝vs2022報錯的解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 關于C++面向對象設計的訪問性問題詳解

    關于C++面向對象設計的訪問性問題詳解

    這篇文章主要給大家介紹了關于C++面向對象設計的訪問性問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • C++中析構函數(shù)為何是虛函數(shù)

    C++中析構函數(shù)為何是虛函數(shù)

    這篇文章主要介紹了C++中析構函數(shù)為何是虛函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中的運算符重載詳解

    C++中的運算符重載詳解

    大家好,本篇文章主要講的是C++中的運算符重載詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論

军事| 武安市| 枣庄市| 淮北市| 日照市| 贵德县| 广西| 曲靖市| 华宁县| 长葛市| 福鼎市| 池州市| 红桥区| 陆良县| 丹阳市| 阿合奇县| 晋宁县| 石渠县| 洪洞县| 广汉市| 奉化市| 玉龙| 武城县| 邢台市| 古丈县| 扬州市| 高要市| 榆树市| 溆浦县| 汉中市| 大城县| 湖州市| 东方市| 聂荣县| 山东省| 彭阳县| 高阳县| 桐城市| 洞口县| 林周县| 辽宁省|