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;
    }
}


相关文章
|
4月前
【每日一题Day168】LC2427公因子的数目 | 模拟
【每日一题Day168】LC2427公因子的数目 | 模拟
33 1
|
存储 安全 算法
使用jotp实现双因子验证
扫盲使用totp增强身份安全性指南,原理看懂也不用自己造轮子呀,最讨厌哪些啥也不懂的搬运工,我这里给大家解惑吧
481 0
|
4月前
|
存储 负载均衡 算法
负载均衡案例:如何只用2GB内存统计20亿个整数中出现次数最多的整数
负载均衡案例:如何只用2GB内存统计20亿个整数中出现次数最多的整数
93 2
|
4月前
|
存储 设计模式 算法
【数据结构和算法】字符串的最大公因子
对于字符串s和t,只有在s = t + ... + t(t自身连接 1 次或多次)时,我们才认定“t能除尽s”。 给定两个字符串str1和str2。返回最长字符串x,要求满足x能除尽str1且x能除尽str2。
64 1
|
10月前
LeetCode1071. 字符串的最大公因子
LeetCode1071. 字符串的最大公因子
33 0
|
算法 C语言 C++
LeetCode.每日一题 2427. 公因子的数目
将一个数的所有约数枚举出来,存入数组,之后再用数组中的每一个数,去看看能不能被第二个数整除,若能则答案++
53 0
|
Java
猜测1-100的随机整数
猜测1-100的随机整数
101 0
【随心所记】矩阵A的行列式不等于0,是A可逆的充要条件吗?答:是这样的
【随心所记】矩阵A的行列式不等于0,是A可逆的充要条件吗?答:是这样的
【随心所记】矩阵A的行列式不等于0,是A可逆的充要条件吗?答:是这样的
|
算法 Java
【算法】缺失的第一个正数,俄罗斯套娃信封问题
1.缺失的第一个正数 2.俄罗斯套娃信封问题
104 10