修剪字符串中包含单个字符的重复字符

Nee*_*pta 5 .net c# regex linq string

这是一个采访问题 - 如何使用单个字符有效地修剪字符串中的重复字符.

示例:假设这是输入字符串

"reeeturrrnneedd"

输出应该是:

"回"

我通过使用拆分字符串和循环遍历char数组来解释它,但是面试官并不相信答案说这不是有效的方法.

private void test()
{
    string s = "reeeturrrnneeddryyf";
    StringBuilder sb = new StringBuilder();
    char pRvChar = default(char);
    foreach (var item in s.ToCharArray())
    {                
        if (pRvChar == item)
        {
            continue;
        }
        pRvChar = item;
        sb.Append(pRvChar);
    }

    MessageBox.Show(sb.ToString());
}
Run Code Online (Sandbox Code Playgroud)

然后我想到Linq对象和使用不同但它会给出不正确的输出,因为它删除所有重复的字符和输出将是"retund"

有人能告诉我更有效的方法吗?

Hei*_*ler 6

这是一个正则表达式的解决方案:

Regex regex = new Regex( "(.)\\1+" );
string result = regex.Replace( s,"$1" );
Run Code Online (Sandbox Code Playgroud)

我不确定,如果在执行时间方面这比你的'for'循环更有效,但它在开发人员工作方面更有效率.并且易于阅读,至少对于熟悉正则表达式的人来说.