翻转字符串中的单词(单词之间由一个或多个空格分隔)。现在要在原地完成。
什么是“在原地”?
翻转字符串中的单词(单词之间由一个或多个空格分隔)。现在要在原地完成。
什么是“在原地”?
原地修改指的是您应该更新原始字符串,而不是创建一个新字符串。
取决于您正在使用的语言/框架,这可能是不可能的。(例如,在.NET和Java中,字符串是不可变的,因此如果不采用某些恶意黑客技巧,则无法对字符串进行原地修改。)
就地算法只能使用O(1)
额外的空间。数组翻转(本质上就是面试问题的关键)是一个经典的例子。以下内容摘自维基百科:
假设我们想要翻转一个有n个元素的数组。一个简单的方法是:
function reverse(a[0..n])
allocate b[0..n]
for i from 0 to n
b[n - i] = a[i]
return b
不幸的是,这需要额外的O(n)
空间来创建数组b
,而且分配通常是一个缓慢的操作。如果我们不再需要a
,我们可以使用这个原地算法用它自己的翻转覆盖它:
function reverse-in-place(a[0..n])
for i from 0 to floor(n/2)
swap(a[i], a[n-i])
有时候要进行原地操作非常困难,一个经典的例子是一般的非方阵矩阵转置。
ABCDEF
变为ADBECF
。 - polygenelubricants您需要将原始字符串的内容反转,而不使用临时存储变量来保存字符串。