当前位置: 首页> 教育> 高考 > 代码随想录训练营Day56:Leetcode647、516

代码随想录训练营Day56:Leetcode647、516

时间:2025/7/12 15:33:39来源:https://blog.csdn.net/maybeyaluokenai/article/details/139350108 浏览次数:1次

Leetcode647:

问题描述:

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

示例 1:

输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"

示例 2:

输入:s = "aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提示:

  • 1 <= s.length <= 1000
  • s 由小写英文字母组成

代码及注释:

class Solution {
public:int countSubstrings(string s) {//枚举所有的连续子串int n=s.size();int ans=0;for(int i=0;i<n;i++){for(int j=i;j<n;j++){if(iskey(s,i,j))ans++;}}return ans;}bool iskey(string& s,int i,int j){while(i<j){if(s[i]!=s[j])return false;i++;j--;}return true;}
};

Leetcode516:

问题描述:

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

示例 1:

输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。

示例 2:

输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb" 。

提示:

  • 1 <= s.length <= 1000
  • s 仅由小写英文字母组成

代码及注释:

class Solution {
public://dp[i][j]代表 s[i,j]最长回文子序列的长度// s[i]==s[j] dp[i][j]=dp[i+1][j-1]+2;// s[i]!=s[j] dp[i][j]=max(dp[i+1][j],dp[i][j-1])int dp[1005][1005];int longestPalindromeSubseq(string s) {int n=s.size();for(int i=n-1;i>=0;i--){dp[i][i]=1;for(int j=i+1;j<n;j++){if(s[i]==s[j]){dp[i][j]=dp[i+1][j-1]+2;}else{dp[i][j]=max(dp[i+1][j],dp[i][j-1]);}}}return dp[0][n-1];}
};

关键字:代码随想录训练营Day56:Leetcode647、516

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: