对中国编程资格赛一题的解答
刚才看到一位朋友对中国编程资格赛中一个题目的解答,觉得答案略为复杂了一些。以下是我的解答,请大家指点:
原题:
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.
解答:
public class ReverseSubstring2
{3
public string findReversed(string input)4
{5
int inputLen=input.Length;//input的长度6
string tmpStr;//临时substring7

8
for (int tmpLen=inputLen;tmpLen>0;tmpLen--)//tmpLen表示临时substring的长度,从inputLen开始递减9
{10
for (int start=0;start<=inputLen-tmpLen;start++)//start表示tmpStr的开始位置11
{12
tmpStr=input.Substring(start,tmpLen);13
if (input.IndexOf(GetReversedStr(tmpStr))>=0)14
{15
return tmpStr;16
}17
}18
}19
return "";20
}21

22
public static string GetReversedStr(string str)//Get 反序字符串23
{24
System.Text.StringBuilder ReversedStr=new System.Text.StringBuilder();25
for (int i=0;i<str.Length;i++)26
{27
ReversedStr.Insert(0,str.Substring(i,1));28
}29
return ReversedStr.ToString();30
}31
}


浙公网安备 33010602011771号