第一题:字符串重排
题目描述
给你一个只包含小写字符的字符串s,你可以按任意顺序重排这个字符串,请问重排过后的字符串中,最多能有多少个 ‘acbcca’ 子串?
例如:字符串 ‘dacbccab’中含 1 个 ‘acbcca’子串,按其他方式重排后最多也只能包含 1 个 ‘ acbcca’ 子串。字符串 ‘acbccaacccb’中含1个‘acbcca’子串,但是重排成 ‘acbccacbcca’后包含了 2个 ‘acbcca’子串。
样例输入1:
dacbccab
样例输出:
1
样例输入2:
acbccaacccb
样例输出:
2
解题思路
前话:看到这道题的时候,就让自己不要复杂化,然后就想到了可以计算abc这三个字母的个数,因为重排有很多种,但是我们没必要知道重排的样子是什么,只需要知道里面有多少个字母就可以了。但是还是觉得没有想到点子上,就跑去做下一个题了😭。事后想想也确实是这样做的。果然还是题做的少了。
解题思路: acbcca
子串中有 2 个a、1个b、3个c。但是要注意a是首尾都有一个,所以尾a可能是下一个匹配串的首a,故我们可以在这个串中找到规律:在这个 acbcca串中只有一个,也就是 a-1、b或者 c/3</