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


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

    原题:

    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.

    解答:

     1public class ReverseSubstring
     2    {
     3        public string findReversed(string input)
     4        {
     5            int inputLen=input.Length;//input的长度
     6            string tmpStr;//临时substring
     7
     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    }
  • 相关阅读:
    [置顶] 也论百度轻应用--一个开发者的吐槽
    HDU 1506 Largest Rectangle in a Histogram
    [置顶] 搭建apache+tomcat+memcached集群环境
    (step8.2.6)hdu 1848(Fibonacci again and again——组合博弈)
    SQL2005、2008、2000 清空删除日志
    网络获取北京时间和系统时间
    C++界面库
    Cocos2d-X游戏开发之Windows7+VS2010环境搭建(亲测)
    华为面试题——一道关于指针方面的编程题(C/C++)
    java之Math
  • 原文地址:https://www.cnblogs.com/chinadhf/p/299362.html
Copyright © 2020-2023  润新知