[C++]Google Code Jam中国竞赛原题解析[一]
来源:互联网 发布:阿里云 ip 编辑:程序博客网 时间:2024/04/29 19:45
Problem Statement
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.
Definition
Class: ReverseSubstring
Method: findReversed
Parameters: string
Returns: string
Method signature: string findReversed(string input)
(be sure your method is public)
Notes
- The substring and its reversal may overlap partially or completely.
- The entire original string is itself a valid substring (see example 4).
Constraints
- input will contain between 1 and 50 characters, inclusive.
- Each character of input will be an uppercase letter ('A'-'Z').
Examples
0)
"XBCDEFYWFEDCBZ"
Returns: "BCDEF"
We see that the reverse of BCDEF is FEDCB, which appears later in the string.
1)
"XYZ"
Returns: "X"
The best we can do is find a one character substring, so we implement the tie-breaker rule of taking the earliest one first.
2)
"ABCABA"
Returns: "ABA"
The string ABA is a palindrome (it's its own reversal), so it meets the criteria.
3)
"FDASJKUREKJFDFASIREYUFDHSAJYIREWQ"
Returns: "FDF"
4)
"ABCDCBA"
Returns: "ABCDCBA"
Here, the entire string is its own reversal.
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.
--------------------------------------------------------------------------
Here is my C++ solution
Solution:
#include <iostream>
#include <string>
using namespace std;
class ReverseSubstring
{
public:
ReverseSubstring(string input)
{
str = input;
}
string findReversed(string input);
string str;
};
string ReverseSubstring::findReversed(string input)
{
char buf[51];
for(int i = 0; i < input.size() && i < 50; ++i)
{
buf[i] = input[i];
}
char tmp;
for(int j = i; j > i / 2; j--)
{
tmp = buf[j - 1];
buf[j - 1] = buf[i - j];
buf[i - j] = tmp;
}
buf[i] = '/0';
for(int l = input.size(); l >= 2; --l) //length
{
for(int s = 0; s <= input.size() - l; ++s) //start point
{
string target(buf);
int re = target.find(input.substr(s,l));
if(re <= 50 && re >= 0)
{
return input.substr(s,l);
}
}
}
return input.substr(0,1);
}
int main()
{
ReverseSubstring str("ABCDCBA");
cout << str.findReversed(str.str);
return 0;
}
- [C++]Google Code Jam中国竞赛原题解析[一]
- Google code jam 2008 Round 1A(c.Numbers)题解
- 2009 Google Code Jam Round 1C 题解
- Google™ Code Jam - 中国编程挑战赛模拟题一
- Google Code Jam 2014 -- C
- 2009 Google Code Jam Qualification Round 题解
- Google Code Jam Round2 A,B题解
- Google™ Code Jam - 中国编程挑战赛
- 一起来挑战Google code jam(一)
- Google Code Jam round 1C总结
- google code jam 2015 C. Dijkstra
- google code jam 2009 round1 c
- Google Code Jam 2014(附官方题解)
- 浅尝 Google™ Code Jam - 中国编程挑战赛
- Google™ Code Jam - 中国编程挑战赛模拟题二
- Google™ Code Jam - 中国编程挑战赛模拟题三
- Google Code Jam 2006
- Google China Code Jam
- MSDN DataGrid嵌套DataList (saucer(思归)版)
- 看到一篇Java学习的好文章,适合初学者!
- Java项目:疯狂潜艇的开发笔记(1)
- 局域网指南(转东转西)
- Java NIO开源项目
- [C++]Google Code Jam中国竞赛原题解析[一]
- 寂寞沙洲冷......
- HttpSessionListener统计在线人数
- Linux下C语言编程入门
- 还是分页的存储过程!
- catch的使用
- Notes.ini参数“ServerTasksAt”是否可以指定小时和分钟?
- FLASH8结合PHP上传文件
- [学习笔记][asp.net下SQL语句无法向ACCESS数据库插入数据的小提示