题目
删除字符串中的数字并压缩字符串。如字符串“abc123de4fg56”处理后变成“abcdefg”。注意空间和效率。
解法
1. 最容易想到的方法。遍历一遍将字符复制到另一个辅助数组中里。但使用了一个辅助数组。
2. 不使用辅助数组,使用快慢指针的方式,快指针i遍历原字符串中的每个字符,慢指针j则始终指向当前遍历字符串中的字符的位置,如果i指针当前指向的为一个字符,则将array[i]复制到array[j]的位置上,i和j同时向后移动一个,如果i指向的为一个数字,i继续后移,j不动,直到i再次遍历到一个字符的位置,然后将当前的字符复制到j的下一个位置中。
DELETE-COMPRESS(char[] str):
int i = 0, j = 0;
for i = 0 to str.length:
if str[i] > '9' or str[i] < '0':
array[j] = array[i];
j++;
return str;
这种方式的时间复杂度为O(n),且不需要辅助空间。