目录
问题
删除字符串中的 'b' 和'ac',即保证删除后的结果中不存在'b'和'ac'。
示例:
输入:"acbac" 输出:""
输入:"aaac" 输出:"aa"
输入:"ababc" 输出:"a"
解题思路
分析:如果有字符"b"出现,即立刻删除掉;在字符“c”出现的前面,没有字符b存在的情况下,则可以直接匹配前一个字符是否为"a"。因此,详细实现步骤如下:
1)空字符串的处理。如果字符串为空,则程序直接返回;
2)对字符“b”和“ac”的遍历处理。在判断“ac”之前,先判断字符“b”,如有,则将字符b从字符串中剔除,程序具体实现,则为重新拼接字符串,这里注意字符“b”在字符串的开始或者结尾的单独处理判断,以及剔除字符“b”后,迭代记数不做变动;判断为当前字符不为“b”后,再判断字符“ac”是否出现,因此需要记数i>0,同样注意zi字符“ac”在字符串开始和末尾的处理,因为对字符“ac”剔除后,字符串长度少2,因此迭代记数i=i-1;若两个字符均未进行过剔除,则i=i+1进行递增向后查找;
补充:如2)中所说,因此可以先循环遍历剔除‘b’,确保字符串中不存在‘b’后,再循环遍历,查找剔除"ac",这种实现参考实现方式2。
python具体实现
方式一:解题思路中的详细步骤过程实现
# 删除字符串中的 'b' 和'ac',返回值不存在'b'和'ac'
def delstr2(strd,b,ac):
if strd == '':
return ""
i = 0
while i<len(strd):
if strd[i]=='b':
if i ==0:
strd = strd[1:]
elif i == len(strd)-1:
strd = strd[:len(strd)-1]
break
else:
strd = strd[:i]+strd[i+1:]
elif strd[i]=='c' and strd[i-1]=='a' and i>0:
if i ==1:
strd = strd[2:]
elif i == len(strd)-1:
strd = strd[:i-1]
break
else:
strd = strd[:i-1]+strd[i+1:]
i = i-1
else:
i = i+1
return strd
strd = 'aaaaacbbacc'
print(delstr2(strd,'b','ac'))
方式二:解题思路中的补充部分的方法实现:
# 删除字符串中的 'b' 和'ac',返回值不存在'b'和'ac'
def delstr(strd,b,ac):
if strd == '':
return ""
i = 0
while i<len(strd):
if strd[i]=='b':
if i ==0:
strd = strd[1:]
elif i == len(strd)-1:
strd = strd[:len(strd)-1]
break
else:
strd = strd[:i]+strd[i+1:]
else:
i = i+1
i = 1
while i<len(strd):
if strd[i]=='c' and strd[i-1]=='a':
if i ==1:
strd = strd[2:]
elif i == len(strd)-1:
strd = strd[:i-1]
break
else:
strd = strd[:i-1]+strd[i+1:]
i = i-1
else:
i = i+1
return strd
strd = 'aaaaacbbacc'
print(delstr(strd,'b','ac'))
题外话
这是自己的面试程序题目,现场手写的代码一塌糊涂,即便是这样简单的代码,手写出来错误百出,该时候下功夫了,coding能力,需要实战,加油!!!