程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 經典算法題--求對策字符串的最大長度

經典算法題--求對策字符串的最大長度

編輯:關於C語言

題目:輸入一個字符串,輸出該字符串對稱子字符串的最大長度,如輸入google,則輸出4.

 

方法一:思路很中規中矩,遍歷這個字符串,若有發現相鄰的兩個字符相等,就循環判斷與這兩個字符相鄰的兩個字符是否相等,

       直到不等,記下字符符合條件的字符個數。最大的個數即為所求。

 方法二:在方法一的基礎上略有改動,思路還是一樣,只不過不是一發現相鄰的兩個字符相等就開始循環,

           而是根據上次出現對稱的字符個數比較對應的兩個字符是否相等,

           如果不等,那肯定是不用循環的,我們要求最大的長度嗎?哈哈哈...

           如果相等,就向裡循環,判斷裡面的字符是否相等,不等就退出循環,如果都相等的話,說明更長的長度出現了,

           我們開始向外循環,直到不等為止,記下字符的長度。最後得到的值即為所求。

 

方法一

int counterplan1(const string str)    {        int strlen=str.length();        int maxlen=0;        for(int i=0;i<strlen-1;i++)        {            if(str[i]==str[i+1])            {                int start=i-1;                int end=i+2;                while(start>=0 && end<strlen)                {                    if(str[start]==str[end])                    {                        --start;++end;                    }else                    {                        break;                    }                }                if(maxlen<end-start-1)                {                    maxlen=end-start-1;                }            }        }        return maxlen;    }方法二

int counterplan2(const string str)    {        int strlen=str.length();        int maxlen=0;        for(int i=0;i<strlen-1;i++)        {            if(str[i]==str[i+1])            {                int k=maxlen/2;                if(i+k>=strlen)                {                    break;                }                int start=i-k;                int end=i+k+1;                bool isMore=true;                while(start<i && end>i)                 {                    if(str[start++]!=str[end--])                    {                        isMore=false;                        break;                    }                }                if(!isMore)                {                    continue;                }                 start=i-k;                end=i+k+1;                while(start>-1 && end<strlen)                 {                    if(str[start--]==str[end++])                    {                        maxlen+=2;                    }                }                             }        }        return maxlen ;    }方法二寫得有點亂,有待完善,可能存在BUG。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved