题目
给你一个字符串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 "abc" 串联多次得到,则认为该字符串 有效 。
示例 1:
输入:word = "b"
输出:2
解释:在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc" 。
示例 2:
输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" 。
示例 3:
输入:word = "abc"
输出:0
解释:word 已经是有效字符串,不需要进行修改。
提示: 1 <= word.length <= 50 word 仅由字母 "a"、"b" 和 "c" 组成。
思路
没啥思路,迭代分类讨论就好了。时间复杂度O(n)字符串全部查一次
代码
int addCnt(char* word)
{
if(word[0] == '\0') // 使用比较运算符
{
return 0;
}
if(word[0] == 'a')
{
if (word[1] == 'b')
{
if(word[2] == 'c')
{
//情况1
return addCnt(word + 3);
}
else
{
//情况2
return 1 + addCnt(word + 2);
}
}
if(word[1] == 'c')
{
// 情况4
return 1 + addCnt(word + 2);
}
//情况3
return 2 + addCnt(word + 1);
}
if(word[0] == 'b')
{
if(word[1] == 'c')
{
//情况6
return 1 + addCnt(word + 2);
}
//情况5
return 2 + addCnt(word + 1);
}
if(word[0] == 'c')
{
//情况7
return 2 + addCnt(word + 1);
}
return addCnt(word + 1);
}
int addMinimum(char * word){
return addCnt(word);// 返回 addCnt 的结果
}