1229 Problem V-统计回文子串-入门题-字符串处理-C++实现

问题 V: 统计回文子串

时间限制: 1 Sec  内存限制: 32 MB
提交: 102  解决: 32

题目描述

现在给你一个字符串S,请你计算S中有多少连续子串是回文串。

输入

输入包含多组测试数据。每组输入是一个非空字符串,长度不超过5000。

输出

对于每组输入,输出回文子串的个数。

样例输入 Copy

aba
aa

样例输出 Copy

4
3

代码

提示:

  • 原先我的做法,单边拓展,奇偶情况统一,计算量很大
  • 新角度:降低时间复杂度和空间复杂度->奇数和偶数位像两边拓展(保证每次走过的都算数且不重复)
  • 另一个解题角度:动态规划
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

int CountSubstrings(string s){
    int n=s.length(),countRes=0;
    for(int i = 0;i < n;i++){
        int begin=i,end=i; //奇数位拓展,起点相同
        while(begin>=0&&end<n){
            if(s[begin]==s[end]){
                countRes++;
                begin--;
                end++;
            }
            else{
                break;
            }
        }
        begin=i;
        end=i+1; //偶数位拓展,起点相隔
        while(begin>=0&&end<n){
            if(s[begin]==s[end]){
                countRes++;
                begin--;
                end++;
            }
            else{
                break;
            }
        }
    }
    return countRes;

}

int main(){
    string s;
    long int num=0;
    while(cin>>s){
        num=CountSubstrings(s);
        cout<<num<<endl;

    }
}
发布了20 篇原创文章 · 获赞 0 · 访问量 116

猜你喜欢

转载自blog.csdn.net/weixin_31789689/article/details/104736646
今日推荐