# -*- 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()
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.14 如何统计字符串中连续的重复字符个数
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/94768859
今日推荐
周排行