剑指 Offer II 020. 回文子字符串的个数

该文章介绍了如何使用动态规划方法来判断一个字符串是否为回文串,并计算回文子串的数量。通过分别处理奇数个和偶数个字符的情况,从中心向外扩展进行判断,当找到回文子串时计数加一。算法涉及到字符串操作和循环遍历。
摘要由CSDN通过智能技术生成

动态规划;

属于简单的动态规划,分两种情况,一种是字串字母为奇数个时,一种时字串字母为偶数个时。

判断一个字符串是否为回文串,只需要先判断两端是否相同,如果相同则出去两端看中间的字串是否为回文串,依次类推,直至剩下一个元素(奇数个元素)或者两个元素(偶数个字母),如果中间 都为true,那么这是一个回文串。

这个题只需要计数,那么我们就可以从字符串中的每个字母开始展开判断,像破浪一样向两端散开。然后如果是回文串则+1,然后返回和即可。

class Solution {
public:
    int countSubstrings(string s) {
        // 波浪向两端延申
        // 首先单独一个字母是回文串
        // 第二部判断这个字母两遍是否是回文串,如果是+1,遍历直到触碰到边界,或者是出现非回文串的地方停止
        int count = 0;
        // 奇数个数回文串
        for(int i=0;i<s.size();i++){
            int left = i;
            int right = i;
            while(left>=0&&right<s.size()&&s[left] == s[right]){
                count++;
                --left;
                ++right;
            }
        }
        // 偶数个字母回文串
        for(int i=0;i<s.size();i++){
            int left = i;
            int right = i+1;
            while(left>=0&&right<s.size()&&s[left] == s[right]){
                count++;
                --left;
                ++right;
            }
        }
        return count;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值