classSolution{public:intnumTilePossibilities(stringtiles){vector<int>count(26);for(constchart:tiles)++count[t-'A'];returndfs(count);}private:intdfs(vector<int>&count){intpossibleSequences=0;for(int&c:count){if(c==0)continue;// Put c in the current position. We only care about the # of possible// sequences of letters but don't care about the actual combination.--c;possibleSequences+=1+dfs(count);++c;}returnpossibleSequences;}};
classSolution{publicintnumTilePossibilities(Stringtiles){int[]count=newint[26];for(finalchart:tiles.toCharArray())++count[t-'A'];returndfs(count);}privateintdfs(int[]count){intpossibleSequences=0;for(inti=0;i<26;++i){if(count[i]==0)continue;// Put c in the current position. We only care about the # of possible// sequences of letters but don't care about the actual combination.--count[i];possibleSequences+=1+dfs(count);++count[i];}returnpossibleSequences;}}
classSolution:defnumTilePossibilities(self,tiles:str)->int:count=Counter(tiles)defdfs(count:Dict[int,int])->int:possibleSequences=0fork,vincount.items():ifv==0:continue# Put c in the current position. We only care about the # of possible# sequences of letters but don't care about the actual combination.count[k]-=1possibleSequences+=1+dfs(count)count[k]+=1returnpossibleSequencesreturndfs(count)