在C中,不仅仅跟踪弦的长度,如果我们也跟踪它的方向怎么办?例如,如果str = "hello"
在内存中布局(由malloc给出),我们会说它有一个正方向(+1),因此将+1传递给函数参数。我们现在可以简单地用方向-1表示rev = str[size - 1]
,而不是采用O(n)来反转这个字符串,因此它的处理方式不同。我意识到空终止可能会带来一些问题,但鉴于我们在内存中有字符串长度和起始字符,我们不需要关心空终止(如果我错了就纠正我)。
如果字符串反转在程序中至关重要,这是否可行?有人能给我一个我不应该这样做的理由吗?有没有人听过或看过这个?
很抱歉,如果我的格式设置已关闭,这是我第一次发布。提前谢谢!
答案 0 :(得分:2)
我非常确定为了反转字符串,您将不得不以某种方式复制字符串。除了在寻址级别反转系统的存储器读取的某种MMU技巧之外,这需要必须至少一次地删除该字符串。即使一次复制4/8/16 +字节,这仍然是线性操作。
现在,如果您可以反向读取字符串(使用特殊的迭代器或其他东西),那么也许您可以将此视为O(1)操作,前提是此特殊迭代器也是O(1)