当前位置: 首页 > news >正文

力扣练习之字符串的最大公因子

使用语言:c++

题目: 

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

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

示例 1:

输入:str1 = "ABCABC", str2 = "ABC"
输出:"ABC"

示例 2:

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

示例 3:

输入:str1 = "LEET", str2 = "CODE"
输出:""

 其实这个题自己在做的时候一点思绪都没有,甚至把最大公因子和最小公倍数给搞混了,我真的服了自己了,但是没关系,一步一步来嘛,所以跟理解着官方题解自己写了一遍。

首先来解释几个概念:

1.什么叫约数?

约数其实就是能够整除给定整数的数比如6/3=2,3就是6的约数

约数也称为因数或因子

(易混辨析:质数/合数

质数是指只能被1和它本身整除的自然数,最小的质数是2,也是唯一的偶数质数

合数是指除了1和它本身之外,还能被其他自然数整除的自然数

2.其实length()方法返回的就是整数型了,所以官方题解中所做的强制类型转换的目的可能是为了确保类型明确

 int lenx = (int)s.length() / (int)t.length();

 3.在c++中true表示为1,false表示为0

4.substr用法

string s="hello world";
sub=s.substr(6);//表示提取从索引7到字符串末尾的位置,即world
sub=s.substr(1,4);//表示提取从索引1开始,长度为4的部分。即ello

好了明确这些了以后,给出我参考官方题解写的代码

class Solution {
public:
// 检查是否str是由x组成的
    bool check(string x,string str){
        int num=str.length()/x.length();
        string s;
        for(int i=0;i<num;i++){
            s+=x;
        }
        return s==str;//判断由num个x堆砌起来的s是否和str一样,如果一样的话则说明x能除尽str

    }
public:
    string gcdOfStrings(string str1, string str2) {
        int len1=str1.length();
        int len2=str2.length();
        int len=min(len1,len2);
        for(int i=len;i>0;i--){//因为题目要求求取最长字符串,所以从长度大的开始枚举
            if(len1%i==0&&len2%i==0){
                //只有长度能被整除,这个字符串才有可能除尽str
                //因为x必定是要整除str1和str2的,所以不用求取到底截取谁的字符串,哪一个都一样
                string x=str1.substr(0,i);
                if(check(x,str1)&&check(x,str2))
                return x;//都能除尽,说明找到了
            }
        }
        return "";//如果for循环走完都没有的话,那说明没有最大公约数


        
    }

};

相关文章:

  • 联想 SR590 服务器 530-8i 更换损坏的硬盘
  • 何为第一二三产业?
  • <02.25>八股文
  • Docker run --add-host参数解析(在容器启动时向/etc/hosts文件中添加自定义的主机名与IP映射)(适用于临时调试或测试)
  • kvaser pythoncan 调用报错(x86 ubuntu工控机)
  • 笔记20250225
  • Shell 脚本--检测网络连通性
  • 星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体
  • 【Windows】全角/半角切换(Full/half width switch),英文字符间距变大/变小
  • Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)
  • 【大模型】Ubuntu下 fastgpt 的部署和使用
  • 【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)
  • DeepSeek-OpenSourceWeek-第二天-DeepEP
  • 【Qt】Qt for Open Source Development 安装配置教程(Windows 11)
  • 【Java】I/O 流篇 —— 字符 I/O 流
  • 理解 AI IDE 中的代码库索引:深入探讨 Cursor 的实现
  • C++ | 高级教程 | 信号处理
  • 48.日常算法
  • Python入门 — 类
  • 在ubuntu如何安装samba软件?
  • 网络供应商网站网址/青岛谷歌优化公司
  • 做网站时网页中格式对不齐怎么办/seo词条
  • xv10相同网站/网络事件营销
  • 卡通网站建设/免费推广软件工具
  • 电商网站建设目的/百度店铺注册
  • 做网站怎插入背景/西安楼市最新房价