1077 Kuchiguse (20 分)

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?

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.

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.

3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~
nyan~
3
Itai!

Ninjinnwaiyada T_T
T_T
nai

2. 题意

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

1111111hello
22hello
33333333333hello

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

3. 思路——字符串

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

4. 代码

#include
#include

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;
}

Original: https://www.cnblogs.com/vanishzeng/p/15479949.html
Author: vanish丶
Title: 1077 Kuchiguse (20 分)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/584680/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球