【WXG后端实习面试题】去除驼峰字符串


今天面试了一个腾讯微信后台,说了几句就说弄一个题做一下,结果一脸懵逼,给定字符串,去除其中的驼峰字符串(例如:将“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])
    调试结果如下:
    测试结果1
    测试结果2
    测试结果3

总结:其实这个算法的核心就是while循环部分:其中j的作用很巧妙,配合i的增加做到了对每个驼峰串的识别


文章作者: PengShuai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 PengShuai !
评论
  目录