我的用例
abc
2
输出:6
aac
2
输出:2
aaaaaa
2
输出:0
ababbaaba
2
输出:2
解题思路
递归排列,对待去重的问题一律先排序
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
char[] ch_arr =sc.next().toCharArray();
int len = sc.nextInt();
Arrays.sort(ch_arr);// 排序是为了去重
System.out.println(solution(ch_arr, len, '0'));
}
}
public static int solution(char[] ch_arr, int len, char preChar){
if(len == 0) {//表示已经拼装完成且成功,返回1
return 1;
}
int sum =0;
for(int i=0; i< ch_arr.length; i++) {
if(ch_arr[i] != '0') {//0表示已标记使用
if(i>0 && ch_arr[i-1] == ch_arr[i] && ch_arr[i-1] != '0') {
continue; //重复的
}
if(ch_arr[i] == preChar) {
continue; // 两个相邻位置字符不能相同,跳过
}
char tmp = ch_arr[i];
ch_arr[i] = '0'; // 先标记使用
sum +=solution(ch_arr, len-1, tmp);
ch_arr[i] = tmp; //取消标记,恢复数据
}
}
return sum;
}