翻译和删除一个句子中的重复项

use*_*658 12 c#

我正在准备一个面试问题.其中一个问题是还原一个句子.比如"它是一个令人敬畏的日子"到"令人敬畏的日子".在此之后,他们问是否有重复,你能否删除重复,如"我很好,他是好人","好他是,我是我" .

为了颠倒句子,我写了以下方法

public static string reversesentence(string one)
{
    StringBuilder builder = new StringBuilder();

    string[] split = one.Split(' ');
    for (int i = split.Length-1; i >= 0; i--)
    {

        builder.Append(split[i]);
        builder.Append(" ");
    }
    return builder.ToString();

}
Run Code Online (Sandbox Code Playgroud)

但我没有得到删除重复的想法.我可以在这里得到一些帮助.

Rob*_*Rob 10

这有效:

public static string reversesentence(string one)
{
    Regex reg = new Regex("\\w+");
    bool isFirst = true;
    var usedWords = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
    return String.Join("", one.Split(' ').Reverse().Select((w => {
        var trimmedWord = reg.Match(w).Value;
        if (trimmedWord != null) {
            var wasFirst = isFirst;
            isFirst = false;

            if (usedWords.Contains(trimmedWord)) //Is it duplicate?
                return w.Replace(trimmedWord, ""); //Remove the duplicate phrase but keep punctuation

            usedWords.Add(trimmedWord);

            if (!wasFirst) //If it's the first word, don't add a leading space
                return " " + w;
            return w;
        }
        return null;
    })));
}
Run Code Online (Sandbox Code Playgroud)

基本上,我们根据没有标点符号的单词来判断它是否与众不同.如果它已经存在,只需返回标点符号.如果它不存在,打印出包括标点符号在内的整个单词.

标点符号也会删除示例中的空格,这就是为什么我们不能这样做String.Join(" ", ...)(否则结果将good he Is , am I取而代之good he Is, am I

测试:

reversesentence("I am good, Is he good").Dump();

结果:

good he Is, am I


Eni*_*ity 9

对于普通逆转:

String.Join(" ", text.Split(' ').Reverse())
Run Code Online (Sandbox Code Playgroud)

对于重复删除的逆转:

String.Join(" ", text.Split(' ').Reverse().Distinct())
Run Code Online (Sandbox Code Playgroud)

两者都适用于仅包含空格作为分隔符的字符串.当你介绍,当时的问题变得更加困难.这么多,你需要指定它应该如何处理.例如,应该"I am good, Is he good"成为"good he Is am I""good he Is , am I"?您在问题中的示例更改了案例,"Is"并将其","与其分组.这对我来说似乎不对.