字符串移位包含的问题

/*********************字符串移位包含的问题********************/
/*给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位得到的*/
/*字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1= */
/*ABCD和s2=ACBD,返回false。 */
/*************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TRUE 1
#define FALSE 0
#define SPACE 1

int rotate(char *src, char *des);
int main()
{
  char src[] = "AABCD";
  char des[] = "DA";

  if(rotate(src,des) == TRUE)
  {
    printf("true\n");
  }else
  {
    printf("false\n");
  }

  return 0;
}

int rotate(char *src, char *des)
{
#if SPACE
  int len = strlen(src);

  char *p = (char *)malloc(len*2*sizeof(char)+1);
  for(int i =0; i < len ; i++)
  {
    p[i] = src[i];
  }

  for(int j = len; j < len*2; j++)
  {
    p[j] = src[j-len];
  }
  p[len*2] = '\0';
  printf("%s\n",p);

  if(strstr(p,des) == 0)
  {
    return FALSE;
  }
  return TRUE;

#else
  int len = strlen(src);
  for(int i = 0; i < len - 1; i++)
  {
  char tempchar = src[0];
  for(int j = 0;j < len - 1; j++)
    src[j] = src[j + 1];
  src[len-1] = tempchar;
  if(strstr(src,des) != 0)
  {
    return TRUE;
  }
  }
  return FALSE;

#endif
}

 

这是一道比较简单的算法题,有两种解法。代码为本人所写- -不是尽善尽美的,只能说功能实现了。

第一种解法提高了空间复杂度来换取时间复杂度的降低。除了重新申请空间,鄙人也尝试用realloc函数来重新分配空间,但是realloc函数只能为由malloc()申请的内存重新分配内存。src作为指针传入函数之后,用realloc重新分配未能成功。

第二种解法提高了时间复杂度来换取空间复杂度的降低。

 

本题为编程之美的3.1.

posted @ 2012-08-13 16:40  Tiu.G  阅读(201)  评论(0编辑  收藏  举报