破解代码访谈1.4

时间:2013-09-30 18:30:52

标签: python python-2.7

我通过破解代码面试来练习面试问题。

问题是每个空格('')用'%20'替换它。 字符串的末尾为字符串中的每个空格都有2个额外的空格。

例如输入:str = "b_g_f_ _ _ _"(下划线表示空格。更容易表示)

output: str2 = "b%20g%20f"

目前我的输出无法正常工作

input: "b c  "

output: "b%20c%20%20"

correct output: "b%20c"

代码:

def editstr(str):
    str2 = ""
    length = len(str)
    count = 0
    while 3*count < length:
        for char in str:
            if ord(char) < 257 and ord(char) >= 0 and ord(char) != 32:
                str2 = str2 + char
                count += 1
            else:
                if ord(char) == 32:
                    str2 = str2 + ("%20")
                    count += 3
    print str2

5 个答案:

答案 0 :(得分:4)

Python字符串是不可变的。因此,如果要在Python中实现此类字符串替换,则输入字符串中的额外空格无济于事。如果您想在Python中解决问题,请以Pythonic方式进行:

def editstr(s):
    n = s.count(' ')
    if n == 0: return s
    return s[:-2*n/3].replace(' ', '%20')

这将删除末尾添加的“额外”空格,并使用.replace进行实际的字符串替换。

答案 1 :(得分:3)

也许我错过了一些东西,但只是做了什么错误:

>>> s = "b f g      "
>>> s.strip().replace(' ','%20')
'b%20f%20g'

重写在语言中的行为不会让你更聪明,恰恰相反。以这种方式看待它:

  • 任何Python开发人员都会确切知道此代码的确切内容。
  • 这些功能已有详细记录和测试。
  • 我写这篇文章并测试你的功能的时间大约是1%。

答案 2 :(得分:3)

这是作弊吗?

> import urllib
> urllib.quote("b g f     ")
'b%20g%20f%20%20%20%20%20'

感谢@SteveJessop我终于理解了这个问题我不确定示例中的正确输出是什么,这是我使用生成器对它的看法,也许它更有效:

input = "b g f    "
def generate_str(input):
    new, orig = [len(input)] * 2   
    for i, char in enumerate(input):
        if i == new: 
            break 
        if char == " ":
            new -= 2
            yield "%20"
        else:
            yield char

print ''.join(generate_str(input))

答案 3 :(得分:1)

更多pythonic:

import urllib
urllib.quote(url.strip())

继续上述讨论:

urllib.quote(url[:-2]+(url[-2:].strip()))

答案 4 :(得分:0)

在输入字符串的末尾,这些空格不会计入转换的一部分。 根据ASCII,空格char''是32,但是void char是0。这将有助于您通过在char数组的末尾说足够的空间来理解这个问题的含义。 除此之外,这个面试问题指出你应该进行转换。所以尽量不要为此创建第二个字符串。