你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。
示例 1:
输入:"AAB"
输出:8
解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。
示例 2:
输入:"AAABBC"
输出:188
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/letter-tile-possibilities 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int numTilePossibilities(string tiles) {
int kinds = 0;
sort(tiles.begin(), tiles.end());
for(int sublen = 1; sublen <= tiles.size(); ++sublen)
{
bt(tiles,kinds,0,tiles.size()-1,sublen,0);
}
return kinds;
}
void bt(string tiles, int &kinds, int left, int right, int sublen, int curlen)
{
if(curlen == sublen)
++kinds;
else
{
for(int i = left; i <= right; ++i)
{
if(i > left && tiles[i] == tiles[left])
continue;
swap(tiles[left],tiles[i]);
bt(tiles,kinds,left+1,right,sublen,curlen+1);
}
}
}
};