Python程序员面试算法宝典---解题总结: 第5章 字符串 5.14 如何统计字符串中连续的重复字符个数

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.14 如何统计字符串中连续的重复字符个数

题目:
用递归的方法实现一个求字符串中连续出现相同字符的最大值,例如:字符串"aaabbcc"
中连续出现字符'a'的最大值为3,字符串'abbc'中连续出现字符'b'的最大值为2。

分析:
最简单的方式,假如不用递归,
当遍历的当前字符和下一个字符不同的时候,此时统计当前字符连续出现的最大次数
或者遍历当前字符的时候,
1.1 如果当前字符和上一个字符不同,则此时统计上一个字符连续出现次数
1.2 否则当前字符出现次数累加

关键:

参考:
Python程序员面试算法宝典
'''
class Counter(object):
    def __init__(self, string):
        self.max = 0
        self.maxChar = None
        self.size = len(string)

    '''
    pos表示当前遍历的字符下标
    count表示当上一个字符出现的次数
    '''
    def countSerialChar(self, string, pos, count):
        # 已经遍历到最后一个字符,此时直接统计结果
        if pos >= self.size:
            return
        # 如果当前字符和上一个字符相同,则count累加
        if string[pos - 1] == string[pos]:
            count += 1
            if count > self.max:
                self.max = count
                self.maxChar = string[pos - 1]
        else:
            # 上一个字符开始进行统计
            if count > self.max:
                self.max = count
                self.maxChar = string[pos - 1]
            # 设置当前字符出现的次数为1
            count = 1
        # 递归遍历下一个字符
        self.countSerialChar(string, pos + 1, count)


def process():
    string = "aaabbcc"
    counter = Counter(string)
    counter.countSerialChar(string, 1, 1)
    print counter.maxChar
    print counter.max
    string = 'abbc'
    counter = Counter(string)
    counter.countSerialChar(string, 1, 1)
    print counter.maxChar
    print counter.max
    string = 'aabbb'
    counter = Counter(string)
    counter.countSerialChar(string, 1, 1)
    print counter.maxChar
    print counter.max



if __name__ == "__main__":
    process()

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/94768859