画出状态机转化图
AA可以到BB,BB可以到AA和AB,AB可以到AB和AA
我们发现始终有一条AA -> BB -> AB -> AA的环,其中AB可以自己转换到自己,因此AB的数量一定可以被用完(这是由于AA、BB、AB的数量一定大于1,题目的数据给定,因此一定可以形成一个环),而AA和BB之间也可以互相转换,直到少的一方先用完。
比如AA个数为3,BB个数为2,AA -> BB -> AA -> BB -> AB -> … -> AB -> AA,因此是2 * min(x, y) + 1,加一是因为可以额外多消耗多的一方一次(作为队头),如果AA和BB的个数相等,就是2 * x,无需加1。
class Solution {
public:
int longestString(int x, int y, int z) {
return (2 * min(x, y) + (x != y) + z) * 2;
}
};