[LeetCode]647. Palindromic Substrings

本文详细解析了LeetCode 647题“回文子串”的解题思路及代码实现,采用减少比较次数的方法,通过双指针从中间向两边扩散,有效地解决了寻找所有回文子串的问题。

[LeetCode]647. Palindromic Substrings

题目描述

这里写图片描述

思路

  1. 简单暴力遍历
  2. 减少比较次数,将外层循环遍历的每个元素当作中间值,左右分别伸展,考虑奇数和偶数长度的字符串情况

代码

#include <iostream>
#include <string>

using namespace std;

class Solution {
public:
    /*
    bool isPalind(string str, int start, int end) {
        while (start < end) {
            if (str[start] != str[end]) return false;
            ++start, --end;
        }
        return true;
    }

    int countSubstrings(string s) {
        int res = 0;
        for (int start = 0; start < s.size(); ++start)
            for (int end = start; end < s.size(); ++end)
                if (isPalind(s, start, end)) ++res;
        return res;
    }
    */
    int countSubstrings(string s) {
        int res = 0;
        for (int mid = 0; mid < s.size(); ++mid) {
            for (int offset = 0; mid - offset >= 0 && mid + offset < s.size() && s[mid - offset] == s[mid + offset]; ++offset)
                ++res;
            for (int offset = 0; mid - offset - 1 >= 0 && mid + offset < s.size() && s[mid - offset - 1] == s[mid + offset]; ++offset)
                ++res;
        }
        return res;
    }
};

int main() {
    Solution s;

    cout << s.countSubstrings("aaa") << endl;

    system("pause");
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值