栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

PAT-A1040(C/C++代码解析)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PAT-A1040(C/C++代码解析)

1040 Longest Symmetric String (25 分)

法一:暴力法

#include 
#include 
#include 
#include 
using namespace std;  

int pan (int i,int j,char* str)
{
	while (i<=j)
	{
		if (str[i]!=str[j])
		return 1;
		i++;
		j--;
	}
	return 0;
}

int main ()
{
    char str[1010];
    cin.getline (str,1010);
    int i,j,MAX=-1;
	for (i=0;iMAX)
				MAX=j-i+1;
			}
		}
	}
	printf ("%d",MAX);
    return 0;
}

法二:动态规划

#include 
#include 
#include 
using namespace std;
int main ()
{
    char str[1010];
    cin.getline (str,1010);
    int L=3,i,j,dp[1010][1010],ans=1,l=strlen(str);
	memset (dp,0,sizeof (dp));
	for (i=0;i 

法三:Manacher算法

#include
#include
#include
using namespace std;
const int maxn=11000005;
char st[maxn];//原字符串
char tmp[maxn<<1];//转换后的字符串
int Len[maxn<<1];//Len[i]表示以字符tmp[i]为中心的最长回文字串的最右字符到tmp[i]的长度
int INIT(char *st)
{
    int i,len=strlen(st);
    tmp[0]='@';//字符串开头增加一个特殊字符,防止越界
    for(i=1;i<=2*len;i+=2)
    {
        tmp[i]='#';
        tmp[i+1]=st[i/2];
    }
    tmp[2*len+1]='#';
    tmp[2*len+2]='$';//字符串结尾加一个字符,防止越界(首尾两字符不可相同)
    tmp[2*len+3]=0;
    return 2*len+1;//返回转换字符串的长度
}
//Manacher算法计算过程
int MANACHER(char *st,int len)
{
     int maxx=0,ans=0,po=0;//设maxx为之前计算中最长回文子串的右端点的最大值,并且设取得这个最大值的位置为po
     for(int i=1;i<=len;i++){
         if(maxx>i){
         	Len[i]=Len[maxx-i];//对称性可知:len[i] 和 len[j]
     	 }
         else{
         	Len[i]=1;//如果i>=mx,要从头开始匹配
		 }
         while(tmp[i-Len[i]]==tmp[i+Len[i]]){//老老实实地匹配
         	Len[i]++;
     	 }
         if(Len[i]+i>maxx)//若新计算的回文串右端点位置大于mx,要更新po和mx的值
         {
             maxx=Len[i]+i;
             po=i;
         }
         ans=max(ans,Len[i]);
     }
     return ans-1;//返回Len[i]中的最大值-1即为原串的最长回文子串的长度
}
int main(){
	cin.getline(st,11000005);
	int len = INIT(st);
	printf("%dn",MANACHER(st,len));
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号