zoukankan      html  css  js  c++  java
  • 【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 "";
    }
  • 相关阅读:
    C++树状数组详解
    状态码
    java面试教程视频
    学生管理系统学生基本信息查询(1)
    学生管理系统导包
    学生信息管理系统数据库设计
    SSH简单项目
    MyBatis入门
    Struts配置详解
    Struts的使用
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13740700.html
Copyright © 2011-2022 走看看