1、统计回文
![](https://i-blog.csdnimg.cn/blog_migrate/091215ba2c279ff824fabd65409dfec8.png)
思想:短的从前往后插入到长的串中,判断回文串
#include<iostream>
#include<string>
using namespace std;
bool IsCircle(const string& s)
{
int begin=0;
int end=s.size()-1;
while(begin<end){
if(s[begin]!=s[end]){
return false;
}
++begin;
--end;
}
return true;
}
int main()
{
std::string s1,s2;
getline(cin,s1);
getline(cin,s2);
int count=0;
for(int i=0;i<=s1.size();i++)
{
string s=s1;
s.insert(i,s2);//s2插入到i的位置上,遍历
if(IsCircle(s)){
count++;
}
}
cout<<count<<endl;
}
2、连续最大和
![](https://i-blog.csdnimg.cn/blog_migrate/07f185d6630ca1adad0b71646451e5ea.png)
思想:从第一个开始,前面加起来的与下一个进行比较,获得最大值,动态获取;
//动态规划
#include<iostream>
#include<vector>
using namespace std;
int Getmax(int a,int b)
{
return a>b?a:b;
}
int main()
{
int size;
cin>>size;
vector<int> nums(size);
for(int i=0;i<size;i++)
{
cin>>nums[i];
}
int max=nums[0];
int sum=nums[0];
for(int i=1;i<size;i++)
{
sum=Getmax(sum+nums[i],nums[i]);//状态方程式求最大值
if(sum>=max)
{
max=sum;
}
}
cout<<max<<endl;
}