我通过破解代码面试来练习面试问题。
问题是每个空格('')用'%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
答案 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'
重写在语言中的行为不会让你更聪明,恰恰相反。以这种方式看待它:
答案 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数组的末尾说足够的空间来理解这个问题的含义。 除此之外,这个面试问题指出你应该进行转换。所以尽量不要为此创建第二个字符串。