• 【leetcode】字符串的最大公因子


    char *gcdOfStrings(char *str1, char *str2)
    {
        //if (strstr(str1, str2) == NULL && strstr(str2, str1) == NULL) 原答案
        //如果最大公因子有的话,那必定是有一个包含其中一个,实际就是长的包含短的
        if (!(strstr(str1, str2) == str1 || strstr(str2, str1) == str2)) 
            return "";
        int p_a = 0, p_b = 0, cmp = 0;
        do
        {
            cmp = strcmp(str1 + p_a, str2 + p_b);
            //那个字符串较长对应指针就忘前加上较短字符串的长度,相当于约掉
            cmp > 0 ? (p_a += strlen(str2 + p_b)) : (p_b += strlen(str1 + p_a));
            //if (strstr(str1 + p_a, str2 + p_b) == NULL && strstr(str2 + p_b, str1 + p_a) == NULL)
            //较长的字符串约掉短的字符串后,剩下的继续比较,也是继续符合一个包含其中一个
            if (!(strstr(str1 + p_a, str2 + p_b) == (str1 + p_a) || strstr(str2 + p_b, str1 + p_a) == (str2 + p_b)))
                return "";
        } while (cmp);
        return str1 + p_a;
    }
    char * gcdOfStrings(char * str1, char * str2){
        int len1=strlen(str1),len2=strlen(str2);
        int i,j;
        int minlen= (len1<len2)? len1:len2;
        char* s=(char *)calloc(len1+len2+1,sizeof(char));
        char* buffer=(char *)calloc(minlen+1,sizeof(char));
    
        strcat(s,str1);
        strcat(s,str2);
        for (i=minlen; i>0; i--)
        {
            if (len1 % i || len2 % i) continue;
            memcpy(buffer,s,i);
            for (j=i; j<len1+len2; j+=i)
            {
                if (memcmp(buffer,&s[j],i))
                    break;        
            }
            if (j==len1+len2)
                return buffer;
            memset(buffer,0,i);
        }
        return "";
    }
  • 相关阅读:
    Python 内置函数 —— format
    命名集 —— 名字结构
    命名集 —— 名字结构
    存储与主板的外设接口
    存储与主板的外设接口
    验证码的认识
    验证码的认识
    windows 路径
    windows 路径
    极限的求法
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13740700.html
Copyright © 2020-2023  润新知