看到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)
网友评论