時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:4 描述
輸入乙個字串,求出其中最長的回文子串。子串的含義是:在原串連續出現的字串片段。回文的含義是:正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出(首尾不要輸出多餘的字串)。輸入字串長度大於等於1小於等於5000,且單獨佔一行(如果有多組答案,輸出第一組)。
輸入輸入乙個測試資料n(1<=n<=10);
隨後有n行,每行有乙個字串。
輸出輸出所要求的回文子串。
樣例輸入
1confuciuss say:madam,i'm adam.
樣例輸出
madam,i'm adam
解題思路:
(1)預處理:將字母放在乙個陣列裡,且用乙個陣列記錄每個字母在原字串中的下標,以便最後的輸出;
(2)以每個字元作為回文的中值,進行左右遍歷,尋找最大回文個數,且記錄下左右的下標最後進行輸出;
奇數情況:以i=1 left = i-1,right = i+1 開始遍歷左右;
偶數情況:以i=0 left = i, right = i+1 開始遍歷左右;
當回文為1的情況只需初始化起始和終點下標即可。
**寫的有點爛。。。有待改進。。。
#include #include int main()
if(c >= 'a' && c <= 'z')
}dispose[cot] = '\0';
//printf("%s\n",dispose);
int sum = 0,rcd_l,rcd_r,start_ood = 0,end_ood = 0,max_ood = 0,left,right;//wa了好幾次,大部分初始化為0後過了。。。醉了
for(i=1;i=0 && right <= cot)
else
left--;
right++;
}if(max_ood < sum)
}int max_even = 0,start_even = 0,end_even = 0;
for(i=0;i= 0 && right <= cot)
else
left--;
right++;
}if(max_even < sum)//尋找最大
}int start=0,end=0;
if(max_ood >= max_even)//如果奇數和偶數相同是,按奇數輸出,例如:hhhzxc,奇數累計1,而偶數也累計1,但是此時回文為hhh,所以為奇數
if(max_ood < max_even)
for(i=record[start];i<=record[end];i++)
printf("%c",str[i]);
printf("\n");
}return 0;
}
nyoj 132 最長回文子串
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘...
最長回文子串 最長回文子串行
1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...
最長回文子串
描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘的字串 輸入字串長度大於等於1小於等於5000,且單獨佔一行 如果...