对中国编程资格赛一题的解答

刚才看到一位朋友对中国编程资格赛中一个题目的解答,觉得答案略为复杂了一些。以下是我的解答,请大家指点:

原题:

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.

解答:

 1 None.gif public   class  ReverseSubstring
 2 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 3InBlock.gif        public string findReversed(string input)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 5InBlock.gif            int inputLen=input.Length;//input的长度
 6InBlock.gif            string tmpStr;//临时substring
 7InBlock.gif
 8InBlock.gif            for (int tmpLen=inputLen;tmpLen>0;tmpLen--)//tmpLen表示临时substring的长度,从inputLen开始递减
 9ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
10InBlock.gif                for (int start=0;start<=inputLen-tmpLen;start++)//start表示tmpStr的开始位置
11ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
12InBlock.gif                    tmpStr=input.Substring(start,tmpLen);
13InBlock.gif                    if (input.IndexOf(GetReversedStr(tmpStr))>=0)
14ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
15InBlock.gif                        return tmpStr;
16ExpandedSubBlockEnd.gif                    }

17ExpandedSubBlockEnd.gif                }

18ExpandedSubBlockEnd.gif            }

19InBlock.gif            return "";
20ExpandedSubBlockEnd.gif        }

21InBlock.gif
22InBlock.gif        public static string GetReversedStr(string str)//Get 反序字符串
23ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
24InBlock.gif            System.Text.StringBuilder ReversedStr=new System.Text.StringBuilder();
25InBlock.gif            for (int i=0;i<str.Length;i++)
26ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
27InBlock.gif                ReversedStr.Insert(0,str.Substring(i,1));
28ExpandedSubBlockEnd.gif            }

29InBlock.gif            return ReversedStr.ToString();
30ExpandedSubBlockEnd.gif        }

31ExpandedBlockEnd.gif    }

 

转载于:https://www.cnblogs.com/chinadhf/archive/2005/12/17/299362.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值