leetcode_5。最長の共通のプレフィックス

  • 最長の共通のプレフィックス:最長共通接頭文字列の配列を見つけるために関数を記述します。共通の接頭辞がない場合は、空の文字列を返します「」
示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明: 所有输入只包含小写字母 a-z 。
  • 私は書かれた複数の時間を書いたが、常に見つけることができませんでしたバグを見つけるために長い時間のために立ち往生著者は(2時間を投げる)、一時的に放棄しました。
  • 以下は、正の解である、と私の考え方は似ていますが、比較的小さなポイント、ないバグ
char *longestCommonPrefix(char **strs, int strsSize)
{
  if (strsSize == 0)
  {
    return "";
  }
  if (strsSize == 1)
    return *strs;
  int len = 0;
  for (int i = 0; i < strlen(strs[0]); i++)
  {
    if (strs[0][i] == strs[1][i] && strs[0][i]!='\0')
      len++;
    else
      break;
  }
  for (int i = 1; i < strsSize - 1; i++)
  {
    if(len>strlen(strs[i+1]))
      len = strlen(strs[i + 1]);
    for (int j = len - 1; j >= 0; j--)
    {
      if (strs[i][j] != strs[i + 1][j])
        len = j;
    }
    if (len == 0)
      break;
  }
  char *result = (char *)malloc((len + 1) * sizeof(char));
  strncpy(result, strs[0], len);
  result[len] = '\0';
  return result;
}
  • 以下は、コードのニーズのバグが改善されるべきです。
char * longestCommonPrefix(char ** strs, int strsSize){
    int n=0,tag;
    char *a=NULL;
    if(strsSize==0) return "";
    for(int j=0;(*(strs))[j]!='\0';j++)
    {
        for(int i=1;i<strsSize;i++)
        {
        	if((*(strs))[j]==(*(strs+i))[j])
        	{
        		tag=1;
        	}
        	else tag=0;
        }
        if(tag==1)
        {
        	a=(char *) realloc(a, sizeof(char)*(n+1));
        	a[n]=(*(strs))[j];
	        //printf("%c",a[n]);
	        n++;
        }
        else
        {
        	if(n==0) return "";
        	else 
			{
				a[n]='\0';
				break;
			}
        }
    }
    return a;
}
公開された77元の記事 ウォン称賛19 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_42932834/article/details/95232145