zoukankan      html  css  js  c++  java
  • 51nod 1088 最长回文子串

    回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
    输入一个字符串Str,输出Str里最长回文子串的长度。
    Input
    输入Str(Str的长度 <= 1000)
    Output
    输出最长回文子串的长度L。
    Input示例
    daabaac
    Output示例
    5

    解法一:

    暴力枚举所有串

    若当前枚举串长度大于已知最大回文串

    传到函数里判断是否是回文串

    #include <iostream>
    using namespace std;
    bool fun(string x,int len)
    {
    	for(int i = 0, j = len - 1; i <len / 2; i++, j--)
    	{
    		if(x[i] != x[j])
    			return false;
    	}
    	return true;
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	string text,tmp;
    	int maxlen = 1, len;
    	cin>>text;
    	for(int i = 0; i < text.length(); i++)
    	{
    		tmp = text[i];
    		for(int j = i + 1; j < text.length(); j++)
    		{
    			tmp = tmp + text[j];
    			len = tmp.length();
    			if(len > maxlen)
    			{
    				if(fun(tmp,len))
    				{
    					maxlen = len;
    				}
    			}
    			//cout<<tmp<<' '<<len<<endl;
    			//cout<<fun(tmp,len)<<endl;
    		}
    	}
    	cout<<maxlen<<endl;
    	return 0;
    } 

    解法二:

    若连着两个字符相等 

    如aa 则初始长度为2 

    前后枚举是否相等 长度每次加2;

    若隔一个字符相等 如aba 则初始长度为3  

    前后枚举是否相等 长度每次加2;

    比较求解

    时间可以控制在15ms内

    #include <iostream>
    using namespace std;
    int main()
    {
    	string a;
    	cin>>a;
    	int maxlen = 1, tmplen = 0, alen = a.length();
    	int fst, lst;
    	for(int i = 0; i < alen; i++)
    	{
    		if(a[i] == a[i + 1])
    		{
    			tmplen = 2;
    			fst = i - 1;
    			lst = i + 2;
    			while(a[fst] == a[lst] && fst >= 0 && lst < alen)
    			{
    				tmplen += 2;
    				fst--;
    				lst++;
    			}
    		}
    		if(tmplen > maxlen)
    		{
    			maxlen = tmplen;
    		}
    		if(a[i - 1] == a[i + 1])
    		{
    			tmplen = 3;
    			fst = i - 2;
    			lst = i + 2;
    			while(a[fst] == a[lst] && fst >= 0 && lst <= alen)
    			{
    				tmplen += 2;
    				fst--;
    				lst++;
    			}
    		}
    		if(tmplen > maxlen)
    		{
    			maxlen = tmplen;
    		}
    	}
    	cout<<maxlen<<endl;
    	return 0;
    }




  • 相关阅读:
    how to install VLC Player on Fedora 32 Workstation
    Centos 8.2 2004镜像地址
    Fedora 33 Workstation: x86_64 DVD ISO
    [听力/口语]每天十分鐘回音練習
    CSS设置背景色
    设置禁止子标签超出父标签产生了滚动条
    引用自定义的css或者js文件
    js 中使用typeof
    React native 之 Promise
    Mac升级系统后 Pod Install报错-不能用 解决办法
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270694.html
Copyright © 2011-2022 走看看