美文网首页
2020-03-12 刷题1(字符串公因子)

2020-03-12 刷题1(字符串公因子)

作者: nowherespyfly | 来源:发表于2020-03-13 13:20 被阅读0次

1071 字符串的最大公因子

标签:字符串,公约数
解法一:类似于最大公因数的更相减损法,两个数num1,num2(假设num1>=num2),两个数相等,则最大公因数就是它们自己,否则,num1和num2的最大公因数就等于num2和num1-num2的最大公因数。依次递归下去,直到两个数相等,就找到了最大公因数。
迁移到字符串上,如果两个字符串相同,则最大公因子就是它们自己,否则,最大公因子就是短串和长串减短串的最大公因子。依次递归,直到两个串完全相同。

class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        // boundary
        if(str1.size() == str2.size()){
            if(str1 == str2) return str1;
            return "";
        }
        string strl, strs;
        if(str1.size() > str2.size()){
            strl = str1;
            strs = str2;
        }
        else{
            strl = str2;
            strs = str1;
        }
        if(strl.find(strs) != 0) return "";
        string sub = strl.substr(strs.size());
        return gcdOfStrings(strs, sub);
    }
};

解法二:数学法
如果两个字符串str1和str2,str1+str2=str2+str1,也就是两种拼法,得到的结果一样,那他们一定有公因子;得到结果不相等,就一定没有公因子。最大公因子的长度就是它们长度的最大公约数。所以,如果存在公因子,求取长度为最大公约数的前缀即可。

class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        if(str1 + str2 != str2 + str1) return "";
        return str1.substr(0, __gcd(str1.size(), str2.size()));
    }
};

证明的话,两种情况,一种情况下,短的字符串的长度是长字符串的长度的因数,这种情况下,短字符串就是公因子;另一种情况,短字符串的长度不是长字符串的长度的因数,通过交换两个字符串的位置,长字符串的长度为(l1-l2)的前缀与长度为l1-l2的后缀相同;长度为l2的前缀与l2的后缀相同。所以长度为l2和l1-l2的最大公约数的前缀,就是两个字符串的最大公因子。

相关文章

  • 2020-03-12 刷题1(字符串公因子)

    1071 字符串的最大公因子 标签:字符串,公约数解法一:类似于最大公因数的更相减损法,两个数num1,num2(...

  • LeetCode刷题-字符串的最大公因子

    前言说明 算法学习,日常刷题记录。 题目连接 字符串的最大公因子[https://leetcode-cn.com/...

  • 2019.1.3

    任务:公基视频2个 刷题150 申论1则

  • leetcode刷题之字符串

    leetcode刷题,使用python 1, 无重复字符的最长子串 —— 0003 字符串 给定一个字符串 s ,...

  • 备考倒计时10天~复盘07

    1、听法律视频+职业道德规范+三观材料分析视频 2、刷完中公1套真题的选择题 3、刷1套模考卷 9.12期 第5季...

  • 每日清单

    6点-7点:学习英语 8点-9点:刷题公基50 10点-11点:刷公基50 11点到13点:工作 (喝三杯水) 1...

  • Manacher's Algorithm 的理解

    在 leetcode 刷题刷到求字符串的最长回文字串,而马拉车算法(Manacher's Algorithm), ...

  • 【第七章】python算法刷题开始(3-初级)

    今天继续刷题,但感觉今天遇到的每个题都有点困惑,大家一起帮忙看看: 1、旋转字符串 我的代码: 代码也经过多次验证...

  • 教你怎么做一只考试锦鲤

    考试前14天疯狂刷题,各个平台疯狂刷题,刷题就对了。 刷的越多,大脑记得越多,也许你刷10道题,能记住的只有1道题...

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

    字符串的最大公因子 题目描述 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 ...

网友评论

      本文标题:2020-03-12 刷题1(字符串公因子)

      本文链接:https://www.haomeiwen.com/subject/lsrujhtx.html