复制给定字符串中的每个空格

时间:2019-06-08 11:26:53

标签: string in-place

我在很多采访中发现了以下问题(不是我的采访)。

给定一个字符串,您需要将每个空格替换为2个空格。 您可能会假设您的字符串具有足够的位置来添加所需的空格。 您需要就地执行此操作,不允许分配内存。

我不明白如何在没有覆盖字母的情况下实现这一目标。

2 个答案:

答案 0 :(得分:0)

您的问题中没有很多上下文。假设这是一次编程面试,并且您正在使用C或汇编语言之类的低级语言。我们还假设该字符串具有计数和/或以null结尾,例如“这是一个字符串\ 0 \ 0 \ 0 \ 0”

我将从头到尾扫描字符串并计算空格,我们称其为C。然后我将在字符上的字符串上向后移动,一次将每个字符向前移动C个位置。每次遇到空格时,将空格向前复制C个位置,从C中减去一个,然后再将空格移动C个位置。当C为0时停止。

此处,空值/未使用的值用句点表示。

  c(v1,v2)

答案 1 :(得分:0)

在找到的空格后移动字符串需要一个字母。为了减少减少变速部件所需的时间,我将使用以下方法:

  1. 计算空间数量。我将其称为c
  2. 将字符串移到右边的空格数(我在这里假设是从左到右的阅读方向。)
  3. 从循环c开始直到字符串末尾的循环:
    1. 为0初始化一个已经存在的空间计数器,称为s
    2. 将当前位置的字母复制到当前位置-c + s
    3. 如果字母是一个空格,请增加s并在位置-c + 1上添加一个空格

不确定所有偏移量是否在我心中正确计算,请在需要时进行更正。但是,因为这只是面试中的一个问题,所以要构思一个正确的算法。