EricHo
本帖最后由

本帖最后由 EricHo 于 2012-3-29 16:24 编辑

这道题来源于真实项目代码,实现起来非常简短但考点丰富。别看它不是很难,这么多年可以称得上是灭人无数!

P.S:不考虑正则表达式
//请实现下面的函数,输入参数baseStr是一个(可以更改的)字符串,请将其中所有连续出现的多个空格都替换成一个空格,单一空格需保留。

//请直接使用baseStr的空间,如需开辟新的存储空间,不能超过o(N)(注意是小o,N是字符串的长度)。返回值是替换后的字符串的长度。

//样例代码为C#,但可以使用任何语言。如需使用任何库函数,必须同时给出库函数的实现。

class Program

{

public static int RemoveMultipleSpaces(char[] baseStr)

{

// TODO

}

}

//样例测试程序(请自行补充更多的测试案例)

[TestFixture]

public class ScannersTest

{

[Test]

public void RemoveOneInnterSpaceBlockTest()

{

char[] input = "abc def".ToCharArray();

int resultLength = Program.RemoveMultipleSpaces(input);

Assert.AreEqual(7, resultLength);

Assert.AreEqual("abc def", new string(input, 0, resultLength));

}

[Test]

public void RemoveTwoInnterSpaceBlocksTest()

{

char[] input = "abc def ghi".ToCharArray();

int resultLength = Program.RemoveMultipleSpaces(input);

Assert.AreEqual(11, resultLength);

Assert.AreEqual("abc def ghi", new string(input, 0, resultLength));

}

[Test]

public void KeepSingleSpaceTest()

{

char[] input = " a b d e ".ToCharArray();

int resultLength = Program.RemoveMultipleSpaces(input);

Assert.AreEqual(9, resultLength);

Assert.AreEqual(" a b d e ", new string(input, 0, resultLength));

}

[Test]

public void AllSpacesTest()

{

char[] input = " ".ToCharArray();

int resultLength = Program.RemoveMultipleSpaces(input);

Assert.AreEqual(1, resultLength);

Assert.AreEqual(" ", new string(input, 0, resultLength));

}

}

风音洛洛
高数中毒了
展开Biu

o(N)。。。唉。高数中毒了,看成高阶无穷小了。

[查看全文]