【PAT 甲級】1077 Kuchiguse (20 分)

1077 Kuchiguse (20 分)

The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:

  • Itai nyan~ (It hurts, nyan~)

  • Ninjin wa iyada nyan~ (I hate carrots, nyan~)

Now given a few lines spoken by the same character, can you find her Kuchiguse?

Input Specification:

Each input file contains one test case. For each case, the first line is an integer N (2≤N≤100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.

Output Specification:

For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write nai.

Sample Input 1:

3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~

Sample Output 1:

nyan~

Sample Input 2:

3
Itai!
Ninjinnwaiyada T_T
T_T

Sample Output 2:

nai

我的思路

整體思想是反轉字符串,循環找最小重複單元,用C++的String:

1.string的整行輸入:參考getline用法,注意讀N的時候如果不加"\n",getline無法正常使用;

2.string的倒序:使用反向迭代器實現;

3.string的初始化以及其他常用方法

 

我的代碼

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
	int N;
	string a,b;
	
	//輸入 
	scanf("%d\n", &N);  //注意!這裏一定要\n換行,要不然getline無法正常使用。 
	getline(cin,a);
	
	string m(a.rbegin(), a.rend());  //使用反向迭代器實現倒序
	a = m;

	for (int g=1; g<=N-1; g++)
	{
		getline(cin,b);
		string n(b.rbegin(), b.rend());
		int i=0;
		int minL = min(a.length(), b.length());
		while(i<=minL)
		{  //找出重複字符串的倒序
			if (a[i]!=n[i]) break;
			i++;
		} 	
		if (i==0) 
		{  //若無重複字符串,則直接輸出結束 
			printf("nai");  
			return 0; 
		} else {
			string t(a,0,i);  //從a中下標爲0的字符開始,連續取i-1個字符構成t
			a = t;  //a是重複字符串的倒序
		}
	}

	//輸出
	string rc(a.rbegin(),a.rend());  //重複字符串 
	cout << rc;

	return 0;
 } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章