前一篇博客是一个常规字符串问题的解决,如果字符串中有重复子串,如1223,如果还是用上篇博客的解决方法,就会造成重复,这里给出“去重”解法。
以空间换取时间的算法:
#include <stdio.h>
void swap(char array[],int src,int dst)
{
char temp = array[src];
array[src] = array[dst];
array[dst] = temp;
}
void Permutation(char array[],int from , int to )
{
// printf("start..from = %d,to = %d \n",from,to);
int i=0;
int hash[256] = {0};
if(from == to)
{
for(i=0;i<=to;i++)
{
printf("%c",array[i]);
}
printf("\n");
}
for(i=from;i<=to;i++)
{
if(hash[array[i]] == 1)
continue;
hash[array[i]] = 1;
swap(array,i,from);
Permutation(array,from+1,to);
swap(array,i,from);
}
}
int main()
{
char str[] = "1223";
int len = sizeof(str)/sizeof(char);
Permutation(str,0,len-2);
}