题目:
给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。
如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效 。
解题方法
1.先判断字符串是否全是由abc组成
2.判断字符串是否全是由单个a或b或c组成
3.字符串长度为2,只需添加一次情况
4.遍历
-
使用for循环会出现 for i in range(s) 在循环里i+n无效 如:当前i= 2 循环里i+2 4,进入下一次循环
i为i+1 即3 所以用while循环,用while,则需先定义当前i为0,且i<len(word) -
字符判断时,首先先判断是否是字符串中的最后一个字符,是则不再进行后续的循环
-
不是最后一个字符,接着判断n种情况,ab、ac、bc、abc、a、b、c这几种情况需要添加字符数量,下一轮从哪个字符开始遍历
代码:
class Solution(object):def addMinimum(self, word):""":type word: str:rtype: int"""s=len(word)#判断字符串是否全是由abc组成if s==0 or (word.count('abc') == s/3 and s%3==0):return 0#字符串是否全是由单个a或b或c组成elif word.count(word[0])== s:return s*2#字符串长度为2,只需添加一次情况elif s==2 and word in ('ab','ac','bc'):return s//2count =0i = 0#遍历while i<s:if word[i] =='a' and i<s:#当前字符是否是字符串最后一个字符if i+1 ==s:count+=2breakif word[i+1] =='b' and i+1<s:if i+2==s:count+=1breakif word[i+2] =='c' and i+2<s:if i+3==s:breaki+=3else:count+=1i+=2elif word[i+1] =='c' and i+1<s:if i+2==s:count+=1breakcount+=1i+=2else:count+=2i+=1elif word[i]=='b' and i<s:if i+1==s:count+=2breakif word[i+1] =='c' and i+1<s:if i+2==s:count+=1breakcount+=1i+=2else:count+=2i+=1else:if i+1==s:count+=2breakcount+=2i+=1return count