有重复字符的排列

来源:互联网 发布:专业写作软件 编辑:程序博客网 时间:2024/05/21 22:47

尼玛,酱紫 难度又加大了,还没想清楚:

#include "stdio.h"#include "string.h"void Exchange(char* pStr,int i,int j){char temp = pStr[i];pStr[i] = pStr[j];pStr[j] = temp;}bool IsSubStr(char* pStr,  int p,int q,char test)  {  if (pStr == nullptr)  {  return false;  }  char* temp = pStr;  for (int i=p; i <= p; ++i){if (*(pStr+i) == test){return true;}}  return false;  }void DoPermute(char* pStr,int k){int len = strlen(pStr);if (k == len){printf("%s \n", pStr);}else{for (int i=k; i < len; ++i){if (i!=k && IsSubStr(pStr,k,i-1,pStr[i])){continue;}else{Exchange(pStr,i,k);DoPermute(pStr,k+1);Exchange(pStr,i,k);}}}}void RecursivePermute(char* pStr){DoPermute(pStr,0);}int main(){char temp[] = "AABB";RecursivePermute(temp);}