题目:
给定一个字符类型的数组 chas[],其中只有数字和 “*”星型字符,现在想把所有的星型字符挪到数组的左边,数字字符全部放到右边,顺序不许变。
要求:
时间复杂度为 O(N), 空间复杂度是O(1)。
代码:
def replace_stars(self, str_list): # 将所有*号移动到数组的左侧
j = len(str_list) - 1
for i in xrange(len(str_list)-1, -1, -1):
if str_list[i] != '*':
str_list[j] = str_list[i]
j -= 1
for i in xrange(0, j+1):
str_list[i] = '*'
return str_list
分析:
这个问题的核心是字符串内部的调整替换,这个调整和替换的功能和排序不一样,它并非全面整体的调整,而是确定一些简单的规则进行调整和替换。由于比较简单,所以时间复杂度和空间复杂度就比较低,利用逆序处理的方法节省空间。