您的位置:首页 > 其它

NYOJ - Substring

2014-01-05 15:07 176 查看


Substring

时间限制:1000 ms | 内存限制:65535 KB
难度:1

描述

You are given a string input. You are to find the longest substring of input such that the reversal of the substring is also a substring of input. In case of a tie, return the string that occurs earliest in input.

Note well: The substring and its reversal may overlap partially or completely. The entire original string is itself a valid substring . The best we can do is find a one character substring, so we implement the tie-breaker rule of taking the earliest one first.

输入The first line of input gives a single integer, 1 ≤ N ≤ 10, the number of test cases. Then follow, for each test case, a line containing between 1 and 50 characters, inclusive. Each character of input will be an uppercase
letter ('A'-'Z').
输出Output for each test case the longest substring of input such that the reversal of the substring is also a substring of input
样例输入
3
ABCABA
XYZ
XCVCX


样例输出
ABA
X
XCVCX


#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
string s1,s2;
int n;
cin >> n;
while(n--)
{
cin >> s1;
s2 = s1;
reverse(s2.begin(),s2.end());  // 反转字符串
bool flag = false;
for(int i = s1.size(); i > 0; i--)   // 可以从最长字符串遍历
{
for(int j = 0; j <= s1.size()-i; j++)
{
string t = s1.substr(j,i);
string::size_type pos = s2.find(t);
if(pos != string::npos)
{
cout << t << endl;
flag = true;
break;
}
}
if(flag) break;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: