• 1071. 字符串的最大公因子


    描述

    对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
    返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。

    示例 1:
    输入:str1 = "ABCABC", str2 = "ABC"
    输出:"ABC"

    示例 2:
    输入:str1 = "ABABAB", str2 = "ABAB"
    输出:"AB"

    示例 3:
    输入:str1 = "LEET", str2 = "CODE"
    输出:""

    思路

    • 方法1 数学法

    如果存在一个符合要求的字符串 X,那么也一定存在一个符合要求的字符串 X',它的长度为 str1 和 str2 长度的最大公约数
    如果 str1 和 str2 拼接后等于 str2和 str1 拼接起来的字符串(注意拼接顺序不同),那么一定存在符合条件的字符串 X

    class Solution {
    public:
        string gcdOfStrings(string str1, string str2) {
            if(str1+str2!=str2+str1)
                return "";
            return str1.substr(0,gcd(str1.length(),str2.length()));
        }
    };
    
    • 方法2 暴力法
      满足的公因子必定为字符串的某个前缀,从最大公约数子串开始递减检查即可
    class Solution {
    public:
        bool isSubstr(string s, string t){
            int mt=s.length()%t.length();
            int ct=s.length()/t.length();
            if(mt!=0)
                return false;
            string ans="";
            for(int i=0;i<ct;i++)
                ans+=t;
            return s==ans;
        }
        string gcdOfStrings(string str1, string str2) {
            int maxLen=min(str1.length(),str2.length());
            for(int i=maxLen;i>=1;i--){
                string x=str1.substr(0,i);
                if(isSubstr(str1,x)&&isSubstr(str2,x))
                    return x;
            }
            return "";
        }
    };
    
  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12695275.html
Copyright © 2020-2023  润新知