摘要:示例輸入輸出解釋三個(gè)回文子串示例輸入輸出說(shuō)明個(gè)回文子串注意輸入的字符串長(zhǎng)度不會(huì)超過(guò)。解答這一題可以用窮舉法,檢查是否為回文字串但是應(yīng)該會(huì)超時(shí)。設(shè)置表示是否是回文字串,若是為,否則為。
題目地址:
https://leetcode-cn.com/probl...
題目描述:
給定一個(gè)字符串,你的任務(wù)是計(jì)算這個(gè)字符串中有多少個(gè)回文子串。
具有不同開始位置或結(jié)束位置的子串,即使是由相同的字符組成,也會(huì)被計(jì)為是不同的子串。
示例 1:
輸入: "abc"
輸出: 3
解釋: 三個(gè)回文子串: "a", "b", "c".
示例 2:
輸入: "aaa"
輸出: 6
說(shuō)明: 6個(gè)回文子串: "a", "a", "a", "aa", "aa", "aaa".
注意:
輸入的字符串長(zhǎng)度不會(huì)超過(guò)1000。
解答:
這一題可以用窮舉法,檢查s[i...j]是否為回文字串但是應(yīng)該會(huì)超時(shí)。
不過(guò)我們可以這么想,如果現(xiàn)在知道了s[i...j]是回文字串,那么如果
s[i-1] == s[j+1],那么s[i-1...j+1]也一定是回文字串。這樣就聯(lián)想到了
動(dòng)態(tài)規(guī)劃。
設(shè)置dp[i] [j]表示s[i...j]是否是回文字串,若是為true,否則為false。
那么對(duì)任意的dp[i] [j] = dp[i+1] [j-1]&&s[i]==s[j]。一旦為true就把
結(jié)果+1。
不過(guò)需要注意的是要使用上述的遞推公式,需要先求出所有長(zhǎng)度為1和為2的回文字串,這個(gè)比較
簡(jiǎn)單,就不贅述了。
java ac代碼:
class Solution { public int countSubstrings(String s) { //dp[i][j]表示s[i...j]是否為回文字串。 boolean[][] dp = new boolean[s.length()][s.length()]; int ans = 0; for(int i = 0;i < dp.length;i++) { dp[i][i] = true; ans++; } for(int i = 1;i < dp.length;i++) if(s.charAt(i-1) == s.charAt(i)) { dp[i-1][i] = true; ans++; } for(int k = 2;k < s.length();k++) for(int i = k;i < s.length();i++) if(s.charAt(i-k) == s.charAt(i)&&dp[i-k+1][i-1]) { dp[i-k][i] = true; ans++; } return ans; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77458.html
Problem 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 c...
摘要:圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的一個(gè)圖,寫出一個(gè)函數(shù)找到所有的最小高度樹并返回他們的根節(jié)點(diǎn)。因此使用一個(gè)數(shù)組代表每個(gè)節(jié)點(diǎn)的入度,若入度為就是葉子節(jié)點(diǎn)。 題目地址:https://leetcode-cn.com/probl...題目描述: 對(duì)于一個(gè)具有樹特征的無(wú)向圖,我們可選擇任何一個(gè)節(jié)點(diǎn)作為根。圖因此可以成為樹,在所有可能的樹中,具有最小...
摘要:關(guān)于遞歸這里提一兩點(diǎn)遞歸基本有這幾步遞歸的模板,終止條件,遞歸調(diào)用,邏輯處理。 ?作者簡(jiǎn)介:大家好,我是車神哥,府學(xué)路18號(hào)的車神? ?個(gè)人主頁(yè):應(yīng)無(wú)所住而生...
摘要:對(duì)于每個(gè)氣球,提供的輸入是水平方向上,氣球直徑的開始和結(jié)束坐標(biāo)。可以射出的弓箭的數(shù)量沒有限制。弓箭一旦被射出之后,可以無(wú)限地前進(jìn)。我們想找到使得所有氣球全部被引爆,所需的弓箭的最小數(shù)量。解答這是一道區(qū)間覆蓋問(wèn)題,不太好說(shuō)清楚,利用模板即可。 題目地址:https://leetcode-cn.com/probl...題目描述:在二維空間中有許多球形的氣球。對(duì)于每個(gè)氣球,提供的輸入是水平方...
閱讀 2310·2021-11-22 12:01
閱讀 1983·2021-11-12 10:34
閱讀 4508·2021-09-22 15:47
閱讀 2827·2019-08-30 15:56
閱讀 2861·2019-08-30 15:53
閱讀 2398·2019-08-30 13:53
閱讀 3371·2019-08-29 15:35
閱讀 3119·2019-08-29 12:27