PAT-ADVANCED1077——Kuchiguse
阿新 • • 發佈:2018-12-20
題目描述:
題目翻譯:
1077 口頭禪
日語因其句子結尾部分而臭名昭著。這種結尾部分的個人偏好可以被視為說話者個性的反映。這種偏好被稱為“Kuchiguse”,在動漫和漫畫中經常被誇大。例如,人為地在句子結束部分加上“nyan~”經常被用作具有貓般個性的角色的刻板印象:
Itai nyan~(好痛,nyan~)
Ninjin wa iyada nyan~(我討厭胡蘿蔔,nyan~)
現在給出同一個角色說的幾句話,你能找到她的Kuchiguse嗎?
輸入格式:
每個輸入檔案包含一個測試用例。對於每個測試用例,第一行是整數N(2 <= N <= 100)。接下來N行,每行是包含0~256(含)個字元的字串,每個字串代表一個人的一句話。每行區分大小寫。
輸出格式:
對於每個測試用例,在一行中列印字串的“kuchiguse”,即所有N行的最長公共字尾。如果沒有這樣的字尾,列印nai。
輸入樣例1:
3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~
輸出樣例1:
nyan~
輸入樣例2:
3
Itai!
Ninjinnwaiyada T_T
T_T
輸出樣例2:
nai
知識點:字串
思路:對每個字串翻轉後求其最長公共字尾
PAT不支援使用cstring標頭檔案中的strrev函式,因此需要我們自己寫一個翻轉字串的函式。
時間複雜度和空間複雜度均是O(N)。
C++程式碼:
#include<iostream> #include<cstring> void reverse(char* str, int N); int main() { int N; scanf("%d", &N); getchar(); char input[N][257]; for(int i = 0; i < N; i++) { scanf("%[^\n]", input[i]); reverse(input[i], strlen(input[i])); getchar(); } char result[257]; int index = 0; while(true) { bool flag = true; for(int i = 0; i < N - 1; i++) { if(index >= strlen(input[i]) || index >= strlen(input[i + 1]) || input[i][index] != input[i + 1][index]) { flag = false; } } if(!flag){ break; } result[index] = input[0][index]; index++; } result[index] = '\0'; reverse(result, strlen(result)); if(strlen(result) == 0){ printf("nai\n"); }else{ printf("%s\n", result); } return 0; } void reverse(char* str, int N){ for(int i = 0; i < N / 2; i++){ char temp = *(str + i); *(str + i) = *(str + N - i - 1); *(str + N - i - 1) = temp; } }
C++解題報告: