给你一个字符串 s
,它包含一个或者多个单词。单词之间用单个空格 ' '
隔开。
如果字符串 t
中第 i
个单词是 s
中第 i
个单词的一个 排列 ,那么我们称字符串 t
是字符串 s
的同位异构字符串。
- 比方说,
"acb dfe"
是"abc def"
的同位异构字符串,但是"def cab"
和"adc bef"
不是。
请你返回 s
的同位异构字符串的数目,由于答案可能很大,请你将它对 10^9 + 7
取余 后返回。
示例 1:
```txt
输入:s = "too hot"
输出:18
解释:输入字符串的一些同位异构字符串为 "too hot" ,"oot hot" ,"oto toh" ,"too toh" 以及 "too oht" 。
```
示例 2:
```txt
输入:s = "aa"
输出:1
解释:输入字符串只有一个同位异构字符串。
```
提示:
1 <= s.length <= 10^5
s
只包含小写英文字母和空格' '
。相邻单词之间由单个空格隔开。
统计同位异构字符串数目
题目
给你一个字符串 s
,它包含一个或者多个单词。单词之间用单个空格 ' '
隔开。
如果字符串 t
中第 i
个单词是 s
中第 i
个单词的一个 排列 ,那么我们称字符串 t
是字符串 s
的同位异构字符串。
- 比方说,
"acb dfe"
是"abc def"
的同位异构字符串,但是"def cab"
和"adc bef"
不是。
请你返回 s
的同位异构字符串的数目,由于答案可能很大,请你将它对 10^9 + 7
取余 后返回。
示例 1:
1 | 输入:s = "too hot" |
示例 2:
1 | 输入:s = "aa" |
提示:
-
1 <= s.length <= 10^5
-
s
只包含小写英文字母和空格' '
。 - 相邻单词之间由单个空格隔开。
题解
方法一:
思路
求出每个单词的多重全排列,然后根据乘法原理,累乘即可。
设第i个单词的字母a出现的次数为$a_i$
答案是$\prod \frac{(a_i+b_i+\cdots+z_i)!}{a_i!b_i!\cdots z_i!}$
我们可以预处理阶乘的逆元减小时间复杂度。
代码
1 | class Solution { |