【Leetcode】 1071. 字符串的最大公因子

news/2024/7/23 11:16:18 标签: leetcode, c++, 算法

For two strings s and t, we say “t divides s” if and only if s = t + ... + t (i.e., t is concatenated with itself one or more times).

Given two strings str1 and str2, return the largest string x such that x divides both str1 and str2.

Example 1:

Input: str1 = "ABCABC", str2 = "ABC"
Output: "ABC"

Example 2:

Input: str1 = "ABABAB", str2 = "ABAB"
Output: "AB"

Example 3:

Input: str1 = "LEET", str2 = "CODE"
Output: ""

Constraints:

  • 1 <= str1.length, str2.length <= 1000
  • str1 and str2 consist of English uppercase letters.

Thought:

  1. 定义一个check函数,用于判断一个字符串t是否是另一个字符串s的因子。如果s可以由多个t拼接而成,则返回true,否则返回false

  2. 在主函数gcdOfStrings中,首先计算出两个字符串的长度len1len2

  3. 然后取出str1的前gcd(len1, len2)个字符作为字符串T

  4. 判断T是否是str1str2的因子,如果是,则返回T,否则返回空字符串。

AC:

/*
 * @lc app=leetcode.cn id=1071 lang=cpp
 *
 * [1071] 字符串的最大公因子
 */

// @lc code=start
class Solution {
    bool check(string t, string s)
    {
        int lenx = (int)s.length() / (int)t.length();
        string ans = "";
        for(int i = 1; i <= lenx; i++)
        {
            ans += t;
        }
        return ans == s;
    }

public:
    string gcdOfStrings(string str1, string str2) {
        int len1 = (int)str1.length(), len2 = (int)str2.length();
        string T = str1.substr(0, __gcd(len1, len2));
        if(check(T, str1) && check(T, str2))
            return T;
        return "";
    }
};
// @lc code=end

AC
此外,官方题解中有一种数学做法,更为便捷!

/*
 * @lc app=leetcode.cn id=1071 lang=cpp
 *
 * [1071] 字符串的最大公因子
 */

// @lc code=start
class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        if(str1 + str2 != str2 + str1)
            return "";
        return str1.substr(0, __gcd((int)str1.length(), (int)str2.length()));
    }
};
// @lc code=end

0MS

很夸张,用时 0ms!!!
数学,yyds!说是


Supplement
__gcdC++ STL中的函数,用于求两个数的最大公约数。它的使用方法如下:

  1. 首先需要包含头文件。

  2. 调用__gcd函数,传入两个参数,返回值即为这两个数的最大公约数。

示例代码如下:

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
    int a = 18, b = 24;
    int gcd_result = __gcd(a, b);
    cout << "The gcd of " << a << " and " << b << " is " << gcd_result << endl;
    return 0;
}

运行结果为:

The gcd of 18 and 24 is 6

注意,由于__gcd是C++ STL中的函数,因此需要编译时加上参数-std=c++11或更高版本,否则编译器可能会报错。


C++中的substr()函数用于获取字符串的子字符串。具体用法如下:

string substr (size_t pos, size_t len) const;

参数说明:

  • pos:起始位置,即从第几个字符开始截取,下标从0开始。
  • len:要截取的字符数。

返回值:

  • 返回一个新的字符串,表示从原字符串中截取出的子字符串。

示例:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "Hello World!";
    string s1 = str.substr(0, 5); // 从第0个字符开始截取5个字符
    string s2 = str.substr(6); // 从第6个字符开始截取到字符串结尾

    cout << s1 << endl; // 输出:Hello
    cout << s2 << endl; // 输出:World!
    
    return 0;
}

C++中的substr()函数用于获取字符串的子字符串。具体用法如下:

string substr (size_t pos, size_t len) const;

参数说明:

  • pos:起始位置,即从第几个字符开始截取,下标从0开始。
  • len:要截取的字符数。

返回值:

  • 返回一个新的字符串,表示从原字符串中截取出的子字符串。

示例:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "Hello World!";
    string s1 = str.substr(0, 5); // 从第0个字符开始截取5个字符
    string s2 = str.substr(6); // 从第6个字符开始截取到字符串结尾

    cout << s1 << endl; // 输出:Hello
    cout << s2 << endl; // 输出:World!
    
    return 0;
}

http://www.niftyadmin.cn/n/424006.html

相关文章

ORACLE数据库——SQL语句基础知识点2

ORACLE数据库 SQL语句基础知识点2 适合有SQL基础的人群。 禁止转载&#xff01; 基本语法 SELECT [*] <选择列表> [FROM] <表资源> [,…n] [WHERE] <行搜索条件> [GROUP BY] <分组表达式> [,…n] [HAVING] <组搜索条件> [ORDER B…

mock是什么?以及springboot中怎么使用mockMVC实现单元测试

目录 Mock是什么&#xff1f;Spring Boot中如何使用MockMVC实现单元测试&#xff1f;添加pom依赖创建测试案例 Mock是什么&#xff1f; Mock是一种测试模式&#xff0c;用于模拟或替代依赖项&#xff0c;以便测试程序的某些部分&#xff0c;而不是依赖于真实的外部系统或组件。…

软件工程全周期全过程20项文档模板,附下载。从《合同》到《需求规格说明书》到软件设计、开发、实施、验收、维护等全过程相关文档模板

软技工程全生命周期图 计算机软件研制产品的实现过程一般分为七个阶段&#xff1a; &#xff08;一&#xff09;──软件系统要求分析阶段&#xff0c;包括软件研制要求的确定、签订合同、软件设计和开发的策划&#xff1b; &#xff08;二&#xff09;──软件需求分析阶段&…

智能驾驶下半场!华锐捷/畅行智驾/木牛科技/奥迪威的答案是?

智能加速新周期&#xff0c;如何找准新方向&#xff1f;汽车产业链降本增效趋势下&#xff0c;对上游赛道包括芯片企业、传感器供应商带来什么影响&#xff0c;要如何应对&#xff1f; 智能驾驶下半场&#xff0c;高性价比、可拓展性、快速量产、规模化成为了关键词&#xff0…

汇川H5U计数器轴编程应用(高速计数和测速应用)

H5U编码器轴和脉冲轴相关应用测试请参看下面文章: H5U PLC本地脉冲轴和本地编码器轴测试_RXXW_Dor的博客-CSDN博客H5U PLC如何通过EtherCAT总线控制伺服运动,请参看下面的博客汇川H5U PLC通过EtherCAT总线控制SV660N和X3E伺服_RXXW_Dor的博客-CSDN博客。https://blog.csdn.n…

「2024」预备研究生mem-消序核心原则

一、消序 二、核心原则 相同备选池 三、练习题

创建镜像-dockerfile

Docker 镜像的创建 创建镜像有三种方法&#xff1a; 1.基于已有镜像创建、 2.基于本地模板创建 3.基于Dockerfile创建。 基于现有镜像创建 首先启动一个镜像&#xff0c;在容器里做修改 docker create -it centos:7 /bin/bash然后将修改后的容器提交为新的镜像&#xff…

易基因:NAR:ChIP-seq等揭示蛋白质酰基化与c-di-GMP协同调控放线菌发育与抗生素合成机制|项目文章

易基因细菌ChIP-seq测序分析结果见刊《Nucleic Acids Research》 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2023年06月07日&#xff0c;华东理工大学生物工程学院和生物反应器工程国家重点实验室叶邦策教授和尤迪副教授为共同通…