我们令{a}表示以字母a为首字母的后缀字符串的集合。同理有{b},{c}, ...
根据题意,我们会将任意一个名字分成两部分看待:aA。前者是首字母,后者是除首字母外的后缀字符串。我们考虑任意两个名字aA和bB是否能配对呢?根据规则,aA + bB => aB + bA。
为了符合条件,aB不能出现在原始字符串中。也就是说,B不能出现在{a}里。类似的,bA不能出现在元素字符串中,即A不能出现在{b}里。所以想要aA和bB配对成功,{a}集合与{b}集合里面的相同元素都不能出现。而将这些元素从两个集合中都拿走后,{a}与{b}的元素就可以任意选取,都能保证 aA + bB => aB + bA 符合规则。
综上,我们用二层循环,考察不同的首字母组合,假设分别是x和y,且{x}有m个元素,{y}有n个元素,两个集合的共同元素是k个。那么就有(m-k)*(n-k)*2
种符合规则的配对。最终将26x26层循环得到的结果相加。