详见牛客官方题解思路
以abc为例(个人理解):
f(a,b,c)=af(b,c)+bf(a,c)+cf(b,a);
f(b,c)=bf(c)+cf(b)=bc+cb;
f(c)=c;
发现:af(b,c)=abc+acb,ss通过调换相应位置的值,就可以实现以上想要的结果;
f(b,c)不调换是bf(c),即ss=abc;调换后是cf(b),即ss=acb;
f(c)一个值不用再调换,ss就是所求的值
bf(a,c)+cf(b,a)看作b,a互换,c,a互换;

# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        res=set()

        self.perm(0,ss,len(ss),res)
        return sorted(res)

    def perm(self,pos,ss,size,res):
        #递归退出条件
        if pos+1==size:
            res.add(ss)
            return
        for i in range(pos,size):
            ss=self.swap_str(pos,i,ss)  #交换
            self.perm(pos+1,ss,size,res) #递归
            ss = self.swap_str(pos, i, ss) #回溯

    #交换字符串位置值
    def swap_str(self,pos1,pos2,ss):
        ls=list(ss)
        ls[pos1],ls[pos2]=ls[pos2],ls[pos1]
        return ''.join(ls)