美文网首页
lintcode-212-空格替换

lintcode-212-空格替换

作者: Leoshi | 来源:发表于2017-04-07 13:59 被阅读43次

    看到18%通过率的简单题,发现事情没那么简单。

    18%? interesting

    题目

    描述:
    设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。
    你的程序还需要返回被替换后的字符串的长度。
    注意事项:
    如果使用 Java 或 Python, 程序中请用字符数组表示字符串。

    样例:
    对于字符串"Mr John Smith", 长度为 13
    替换空格之后,参数中的字符串需要变为"Mr%20John%20Smith",并且把新长度 17 作为结果返回。

    总结

    踩到的坑

    • 以为是简单的字符串替换
    • %20就是用来表示空格的,参见这里
    • 只返回新字符串的长度,并检查原字符串
    • 字符串以列表的形式给出,并不能使用split
    • 不清楚检查机制,但经过多次试错发现应该是以id(string)来检查原来的字符串string的,所以不能生成新的字符串再赋值
    • 注意特殊值

    思路

    • 既然给出列表,则使用 append() 和 pop() 保证原地操作
    • 传入的原长度 length 用于检测
    • pop() 默认参数为 -1 即从队尾出列,可使用 pop(0) 从队头出列
    • 为保证长度正确以及避免编译器不认,分三次append

    代码

    class Solution:
        # @param {char[]} string: An array of Char
        # @param {int} length: The true length of the string
        # @return {int} The true length of new string
        def replaceBlank(self, string, length):
            # Write your code here
            if string is None:
                return 0
            count = length
            for s in string:
                if count != 0:
                    count -= 1
                    if s != ' ':
                        string.append(s)
                    else:
                        string.append('%')
                        string.append('2')
                        string.append('0')
            for i in range(length):
                string.pop(0)
            return len(string)
    

    相关文章

      网友评论

          本文标题:lintcode-212-空格替换

          本文链接:https://www.haomeiwen.com/subject/lsrhattx.html