Code: Search a Reverse Substring

 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.

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"
    The similar as above.
4) "ABCDCBA" 
    Returns: "ABCDCBA" 
    Here, the entire string is its own reversal.

None.gifclass  ReverseSubstring
ExpandedBlockStart.gifContractedBlock.gifdot.gif {
InBlock.gif    static void Main(string [] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        string[] strings = new string[] dot.gif { "XBCDEFYWFEDCBZ", "XYZ" , 
ExpandedSubBlockEnd.gif                "FDASJKUREKJFDFASIREYUFDHSAJYIREWQ", "ABCDCBA" } ;
InBlock.gif        for ( int i=0 ; i < strings.Length ; ++ i )
ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif {
InBlock.gif            System.Console.WriteLine(FindReversed(strings[i]));
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
InBlock.gif
InBlock.gif     private static string FindReversed(string  input)
ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif {
InBlock.gif        string substring = string .Empty;
InBlock.gif        for ( int i=0 ; i < input.Length ; ++ i )
ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif {
InBlock.gif            for ( int j=0 ; j < input.Length ; ++ j )
ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif {
InBlock.gif                if ( input[i] == input[input.Length-1- j] )
ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif {
InBlock.gif                    if ( i == input.Length-1- j )
ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif {
InBlock.gif                        if ( substring.Length == 0  )
ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif {
InBlock.gif                            substring =  input[i].ToString();
ExpandedSubBlockEnd.gif                        }
InBlock.gif                         break ;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                     else
ExpandedSubBlockStart.gifContractedSubBlock.gif                     dot.gif {
InBlock.gif                        int k = 0 ;
InBlock.gif                        for ( ; k < input.Length-i-j ; ++ k )
ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif {
InBlock.gif                            if ( input[i+k] != input[input.Length-1-j-k] ) break ;
ExpandedSubBlockEnd.gif                        }
InBlock.gif                        if ( substring.Length <  k )
ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif {
InBlock.gif                            substring =  input.Substring(i, k);
ExpandedSubBlockEnd.gif                        }
ExpandedSubBlockEnd.gif                    }
ExpandedSubBlockEnd.gif                }
ExpandedSubBlockEnd.gif            }
ExpandedSubBlockEnd.gif        }
InBlock.gif         return  substring;
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}

Results are:
None.gif BCDEF
None.gifX
None.gifABA
None.gifFDF
None.gifABCDCBA

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值