PAT甲级--Kuchiguse (20)
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲级--Kuchiguse (20)相关的知识,希望对你有一定的参考价值。
更多PAT甲级题解– acking-you.github.io
题目
题目大意
题目大意很简单,就是给出很多句话,要你分析,最长的公共后缀。
- 这个地方难在输入的处理,注意输入如果用的
getline()
接收的一行,则前面一般不能有别的输入方式,否则会起冲突,导致getline()
并未抢到值。那么怎么解决呢?用scanf("%d\\n")
限定输入的分隔符,这样就不会有冲突了!
代码解析
Input输入处理
void Input() {
scanf("%d\\n", &N);
for (int i = 0; i < N; i++) {
getline(cin, s[i]);
//顺便求出最大的长度方便后续遍历,
//实际上求出最小长度是最好,这样就不用再后续判断了。
MaxSize = max(MaxSize, (int)s[i].size());
}
}
print输出处理
void print() {
string res = "";//普通的迭代循环判断
for (int i = 1; i <= MaxSize; i++) {
if (s[0].size() < i)
break;
bool f = true;
string cmp = s[0].substr(s[0].size() - i, i);
for (int j = 0; j < N; j++) {
int len = s[j].size();
if (len < i)
goto end;
if (cmp != s[j].substr(len - i, i)) {
f = false;
break;
}
}
if (f)
res = cmp;
}
end:
res = (res == "") ? "nai" : res;
cout << res;
}
整合代码得出答案
效率还挺好
#include<bits/stdc++.h>
using namespace std;
int N;
int MaxSize;
string s[101];
//@输入处理
void Input() {
scanf("%d\\n", &N);
for (int i = 0; i < N; i++) {
getline(cin, s[i]);
MaxSize = max(MaxSize, (int)s[i].size());
}
}
//@输出处理
void print() {
string res = "";
for (int i = 1; i <= MaxSize; i++) {
if (s[0].size() < i)
break;
bool f = true;
string cmp = s[0].substr(s[0].size() - i, i);
for (int j = 0; j < N; j++) {
int len = s[j].size();
if (len < i)
goto end;
if (cmp != s[j].substr(len - i, i)) {
f = false;
break;
}
}
if (f)
res = cmp;
}
end:
res = (res == "") ? "nai" : res;
cout << res;
}
int main() {
Input();
print();
return 0;
}
以上是关于PAT甲级--Kuchiguse (20)的主要内容,如果未能解决你的问题,请参考以下文章
1077. Kuchiguse (20)字符串处理——PAT (Advanced Level) Practise