1071.字符串的最大公因子

简介: 1071.字符串的最大公因子

题目:对于字符串 s 和 t,只有在 s = t + t + t + ... + t + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。

给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2 。

                           

解题思路:设前缀串长度为lenx,str1的长度为len1,str2的长度为len2,我们知道前缀串的长度必然要是两个字符串长度的约数才能满足条件,否则无法经过若干次拼接后得到长度相等的字符串,公式化来说,即

len1 mod lenx==0

len2 mod lenx==0

所以我们可以枚举符合长度条件的前缀串,再去判断这个前缀串拼接若干次以后是否等于str1 和 str2即可。

由于题目要求最长的符合要求的字符串 X,所以可以按长度从大到小枚举前缀串,这样碰到第一个满足条件的前缀串返回即可。

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        int len1 = str1.length(), len2 = str2.length();
        String T = str1.substring(0, gcd(len1, len2));
        if (check(T, str1) && check(T, str2)) {
            return T;
        }
        return "";
    }
 
    public boolean check(String t, String s) {
        int lenx = s.length() / t.length();
        StringBuffer ans = new StringBuffer();
        for (int i = 1; i <= lenx; ++i) {
            ans.append(t);
        }
        return ans.toString().equals(s);
    }
 
    public int gcd(int a, int b) {
        int remainder = a % b;
        while (remainder != 0) {
            a = b;
            b = remainder;
            remainder = a % b;
        }
        return b;
    }
}


相关文章
|
8月前
【每日一题Day168】LC2427公因子的数目 | 模拟
【每日一题Day168】LC2427公因子的数目 | 模拟
46 1
求质数的几种方式
求质数的几种方式
|
数据安全/隐私保护 Python
【每周一坑】信息加密​ +【解答】正整数分解质因数
如果之前已经有质因数,最后剩下的 i 就是最后一个质因数;如果没有,说明原数就是质数
|
8月前
|
存储 设计模式 算法
【数据结构和算法】字符串的最大公因子
对于字符串s和t,只有在s = t + ... + t(t自身连接 1 次或多次)时,我们才认定“t能除尽s”。 给定两个字符串str1和str2。返回最长字符串x,要求满足x能除尽str1且x能除尽str2。
86 1
LeetCode1071. 字符串的最大公因子
LeetCode1071. 字符串的最大公因子
48 0
|
算法 测试技术 C#
C++二分算法:黑名单中的随机数
C++二分算法:黑名单中的随机数
【每日挠头算法(4)】字符串相加|字符串相乘
【每日挠头算法(4)】字符串相加|字符串相乘
|
算法 C语言 C++
LeetCode.每日一题 2427. 公因子的数目
将一个数的所有约数枚举出来,存入数组,之后再用数组中的每一个数,去看看能不能被第二个数整除,若能则答案++
64 0
|
算法 C# Python
转:洗牌算法,随机算法的别名
洗牌算法是随机打乱一组数据的算法。常用的洗牌算法有随机置换算法和Fisher-Yates算法。随机置换算法是在数组中随机交换元素的位置,而Fisher-Yates算法是从数组的末尾向前遍历,并在遍历过程中与随机位置交换元素。
129 0
|
Java
猜测1-100的随机整数
猜测1-100的随机整数
137 0

热门文章

最新文章