ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1077 Kuchiguse (20 分)

2021-10-29 13:01:19  阅读:167  来源: 互联网

标签:nyan ch 20 int 1077 strs flag Kuchiguse 倒数第


1. 题目

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

2. 题意

找出n个语句中的习惯语。习惯语即每句话结尾都要加上的相同语句。

例:

1111111hello

22hello

33333333333hello

那么这三句话的习惯语为hello。即题目要求找出n句话结尾最长的习惯语,如果没有则输出nai

3. 思路——字符串

从每句话的末尾遍历,首先记录下第一句话倒数第k个字母,然后与其他几句话的倒数第k个字母进行比较,如果都一致,则将该字母加入结果字符串(即习惯语)。直到出现n句话的倒数第k个字母不一致的情况,查找完毕!其中注意一个细节条件,倒数第k个字母可能对于某句话来说越界了,这时候也要终止查找。

4. 代码

#include <iostream>
#include <string>

using namespace std;

int main()
{
	int n;
	cin >> n;
	string strs[n];
	getchar();
	for (int i = 0; i < n; ++i)
		getline(cin, strs[i]);
		
	int k = 1;
	string res = ""; 
	int flag = 1;		// 终止循环条件 
	char ch;
	while (true)
	{ 
		for (int i = 0; i < n; ++i)
		{
			// 判断每个语句的倒数第k个字母是否相同 
			int j = strs[i].length() - k;
			if (j < 0)	// 越界情况,flag置为0,查找完毕 
			{
				flag = 0;
				break;
			} 
			// 如果i等于0,表示第一个语句,将该字符记录下来,与其他语句对比 
			else if (i == 0)
				ch = strs[i][j];
			// 如果对比结果不一致,说明习惯语收集完毕,退出循环 
			else if (strs[i][j] != ch) 
			{
				flag = 0;
				break;
			}
		}
		if (!flag) break;
		// 因为ch为倒数第k个字符,所以使用ch+res,这样可以按原字符串顺序输出 
		res = ch + res;
		k++;
	}
	if (res != "")
		cout << res << endl;
	else
		cout << "nai" << endl;
	return 0;
}
 

标签:nyan,ch,20,int,1077,strs,flag,Kuchiguse,倒数第
来源: https://www.cnblogs.com/vanishzeng/p/15479949.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有