程序员面试题精选100题(20)-最长公共子串[算法](4)

时间:2019-09-22 编辑:多美文
LCS_Print(int **LCS_direction,
  • char* pStr1, char* pStr2,
  • size_t row, size_t col)
  • {
  • if(pStr1 == NULL || pStr2 == NULL)
  • return;
  •  
  • size_t length1 = strlen(pStr1);
  • size_t length2 = strlen(pStr2);
  •  
  • if(length1 == 0 || length2 == 0 || !(row < length1 && col < length2))
  • return;
  •  
  • // kLeftUp implies a char in the LCS is found
  • if(LCS_direction[row][col] == kLeftUp)
  • {
  • if(row > 0 && col > 0)
  • LCS_Print(LCS_direction, pStr1, pStr2, row - 1, col - 1);
  •  
  • // print the char
  • printf("%c", pStr1[row]);
  • }
  • else if(LCS_direction[row][col] == kLeft)
  • {
  • // move to the left entry in the direction matrix
  • if(col > 0)
  • LCS_Print(LCS_direction, pStr1, pStr2, row, col - 1);
  • }
  • else if(LCS_direction[row][col] == kUp)
  • {
  • // move to the up entry in the direction matrix
  • if(row > 0)
  • LCS_Print(LCS_direction, pStr1, pStr2, row - 1, col);
  • }
  • }
  • 扩展:如果题目改成求两个字符串的最长公共子字符串,应该怎么求?子字符串的定义和子串的定义类似,但要求是连续分布在其他字符串中。比如输入两个字符串BDCABAABCBDAB的最长公共字符串有BDAB,它们的长度都是2

    本文已影响
    相关文章
    热门文章
    好书推荐
    最新文章
    推荐文章
    推荐栏目