字典序最小字符串的排列数计算 乘积算法结果偏差问题排查
问题原因解答
你算法的核心逻辑(仅相同字符交换不改变字典序,总排列数为各字符独立排列数的乘积)是正确的,错误出在单个重复字符的排列数计算规则:
- 当某个字符出现
k次时,k个对应原字符串不同位置的相同字符可自由交换的排列数是 k的阶乘(k! = 1×2×…×k),不是直接取k的值。
你之前的第一个测试用例bbaa刚好巧合符合你的错误计算:a、b各出现2次,2! = 2,乘积2×2=4,和实际结果一致,导致你误把阶乘规则当成了直接乘出现次数。
用该规则验证偏差用例:
测试输入对应的重复字符计数为g:3、h:2、j:2、k:2,计算结果为:3! × 2! × 2! × 2! = 6 × 2 × 2 × 2 = 48
和实际正确结果完全匹配。
另外你之前举例的aaabbbcc,正确计算结果应为3!×3!×2! = 72,不是你之前计算的18。
内容的提问来源于stack exchange,提问作者Kirti Purohit
相关产品推荐
相关产品推荐

