假定输入的字符串中只包含字母和*号。编写程序,要求除了字符串前导和尾部的*号之外,将串中其他*号全部删除。例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是****ABCDEFG******。
时间: 2023-08-28 11:06:02 浏览: 56
可以使用双指针法,一个指针从头开始扫描字符串,另一个指针从尾开始扫描字符串。首先,我们将头指针指向第一个不是*号的位置,尾指针指向第一个不是*号的位置。然后,分别从头指针和尾指针开始向中间移动,如果头指针指向的字符是*号,那么我们就将尾指针指向的字符复制到头指针指向的位置,并将尾指针向左移动一位;如果尾指针指向的字符是*号,那么我们就将头指针指向的字符复制到尾指针指向的位置,并将头指针向右移动一位。直到头指针和尾指针相遇为止。
以下是具体的实现过程:
```python
def remove_stars(s):
# 找到头指针和尾指针
i, j = 0, len(s) - 1
while i < len(s) and s[i] == '*':
i += 1
while j >= 0 and s[j] == '*':
j -= 1
# 双指针移动
while i < j:
if s[i] == '*':
s[i] = s[j]
j -= 1
elif s[j] == '*':
s[j] = s[i]
i += 1
else:
i += 1
j -= 1
return ''.join(s)
s = '****A*BC*DEF*G******'
print(remove_stars(list(s))) # 输出:****ABCDEFG******
```
时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。