这类题目几乎不需要数据结构,算法基础,主要通过简单的逻辑流程和判断实现。
题目描述如下:
大致题意:
这是一个找最长后缀的题目,输入n个字符串,找出来所有字符串共同拥有的最长后缀,如果不存在共同的后缀,则输出nai。
大致思路:
用一个vector数组来接收n个字符串,因为字符串是带有空格的,所以要使用getline(cin,str)
来接收一行字符串。
接下来在vector数组中对字符串进行遍历操作。
提交结果:
有两处测试用例未能通过,猜想可能是由于数组下标越界引起的。该问题留在第二轮刷题时解决。
提交代码如下:
#include<iostream>
#include<string>
#include<vector>
#define MAX 100
using namespace std;
int main()
{
vector<string> arr;
int n;
cin >> n;
getchar(); //用来吸收换行符
string ans = "";
for (int i = 0; i < n; i++)
{
string str;
getline(cin, str);
arr.push_back(str);
}
for (int j = 0; j < n - 1; j++)
{
if (arr[j][arr[j].size() - 1] != arr[j + 1][arr[j+1].size() - 1])
{
cout << "nai" << endl;
return 0;
}
}
for (int i = 0; i < MAX; i++)
{
int j = 0;
for (j; j < n - 1; j++)
{
if (arr[j][arr[j].size() - 1 - i] != arr[j + 1][arr[j+1].size() - 1 - i])
{
break;
}
}
char s = arr[j][arr[j].size() - 1 - i];
string temp = " ";
temp[0]=arr[j][arr[j].size() - 1 - i];
if (j == n - 1&&temp!=" ")
{
ans.insert(ans.begin(), temp.begin(), temp.end());
}
else
break;
}
cout << ans << endl;
}
提交本次代码后,累计分数111,排名为25878