回文子串
647. 回文子串 - 力扣(LeetCode)
dp含义:表示区间内[i,j]是否有回文子串,有true,没有false。
递推公式:当s[i]和s[j]不相等,false;相等时,情况一,j-i<=1,说明要么“a”或者“aa“这两种情况;情况二:dp[i+1,j-1]是true,例如”cbabc“。
(这里图画错,j和i换个位置)
public class Solution {public int CountSubstrings(string s) {bool[,] dp = new bool[s.Length,s.Length];int result = 0;for(int i=s.Length-1;i>=0;i--){for(int j=i;j<s.Length;j++){if(s[i] == s[j] && (j-i<=1 || dp[i+1,j-1])){result++;dp[i,j] = true;}}}return result;}
}
最长回文子序列
516. 最长回文子序列 - 力扣(LeetCode)
dp含义:表示区间内[i,j]的回文子序列的长度dp[i,j]
public class Solution {public int LongestPalindromeSubseq(string s) {int[,] dp = new int[s.Length,s.Length];for(int i=0;i<s.Length;i++)dp[i,i] = 1;for(int i=s.Length-1;i>=0;i--){for(int j=i+1;j<s.Length;j++){if(s[i] == s[j]){dp[i,j] = dp[i+1,j-1]+2;}else{dp[i,j] = Math.Max(dp[i,j-1],dp[i+1,j]);}}}return dp[0,s.Length-1];}
}