今天面试了一个腾讯微信后台,说了几句就说弄一个题做一下,结果一脸懵逼,给定字符串,去除其中的驼峰字符串(例如:将“AaAdfAAaAaA”变成“df”)。
说实话对于驼峰串这个定义就有点模糊,本来当时有点紧张,有时在牛客网上做题,他别是那个面试官看着你做题,我当时脑子真的就是一片空白,这个驼峰串仅仅是两个大写字母中间夹一个小字母吗?能不能是两个小字母夹一个大写字母呢?(毕竟这个aAa也像驼峰)总之面试是gg了,之后网上看了一些解答,自己总结一下。
- 首先对于第一种情况:驼峰串仅仅是两个大写字母中间夹一个小字母,形如AaA
调试结果如下:str = 'AaAdfaAaAaAaAaB' len = len(str) print("%s字符串长度:" % str, len) i = 0 while i < len - 2: # 遇到驼峰 if(str[i] == str[i+2] and str[i] != str[i+1] and str[i].isupper()): j = i + 2 i += 1 # 如果没有驼峰并且不是之前识别驼峰的最后一个字母就打印 elif i != j: print(i, str[i], end=' ') i += 1 print(i) if i == len - 2: # 对于像'AaAdfAaAaAaAaA'这样的串处理最后两个字符不要打印 if(str[i+1] == str[i-1] and str[i] != str[i+1] and str[i+1].isupper()): pass # 对于像"AaAdfAaAaAaAaB"、"AaAdfaAaAaAaAaB"这样的串特殊处理最后两个字符 else: print(i, str[i]) print(i+1, str[i+1])
- 其次对于第二种情况:形如AaA、aAa都可以当成驼峰串
调试结果如下:str = 'AaAdfAaAaAaAaA' len = len(str) print("字符串长度:", len) i = 0 while i < len - 2: # 遇到驼峰 if(str[i] == str[i+2] and str[i] != str[i+1]): j = i + 2 i += 1 # 如果没有驼峰并且不是之前识别驼峰的最后一个字母就打印 elif i != j: print(i,str[i], end=' ') i += 1 print(i) if i == len - 2: # 对于像'AaAdfAaAaAaAaA'这样的串处理最后两个字符不要打印 if(str[i+1] == str[i-1] and str[i] != str[i+1]): pass # 对于像"AaAdfaAaAaAaAaB"这样的字符串特殊处理最后一个字符 elif(str[i] == str[i-2] and str[i] != str[i-1]): print(i+1, str[i+1]) # 对于像'AaAdfAaAaAaAaaa'这样的串特殊处理最后两个字符,另外对于这种情况是不是有点问题 else: print(i, str[i]) print(i+1, str[i+1])
总结:其实这个算法的核心就是while循环部分:其中j的作用很巧妙,配合i的增加做到了对每个驼峰串的识别