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

news2024/12/28 18:03:39

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.coloradmin.cn/o/638182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发改了接口,经常忘通知测试的解决方案!

目录 前言&#xff1a; Apifox解决方案 Apifox对此给出的解决方案是&#xff1a; 用Apifox怎么处理接口变更 接口代码实现逻辑修改 接口参数修改 前言&#xff1a; 在开发过程中&#xff0c;接口变动十分频繁&#xff0c;测试人员没有及时获得相关通知的情况也很普遍。这…

这一次AI应该是真正的已经到来

渐渐感觉这一次AI的变革能真正的突破迷雾&#xff0c;迎来真正的人工智能时代的到来。所以写篇博文学习一下。经过半年的发酵与发展&#xff0c;不得不说AI已经成为了不可逆转的趋势。之所以说这一次AI应该是真正的已经到来&#xff0c;是因为人工智能的发展其实已经经历了几十…

【Python】一文带你了解 正则表达式 + 简单操作

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

通过第三方软件修改 MacOS 的键盘映射

通过第三方软件修改 MacOS 的键盘映射 由于文本编辑时大量使用word level的左移、右移&#xff0c;其中&#xff1a; OSX的单词级左右移为option Left/Right Arrow&#xff0c;整行级左右移为command Left/Right Arrow 单词级移动与进行编辑常用的command不同键位&#xff0c…

Chat2DB:阿里巴巴开源的聊天数据管理工具--实践

Chat2DB&#xff1a;阿里巴巴开源的聊天数据管理工具–实践 简介 ​ Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了…

Jetpack Compose ——Row

当我们构建界面时&#xff0c;经常需要在Compose中使用Row布局来水平排列多个组件。Row提供了一种方便的方式来管理和定位子组件&#xff0c;使它们按照我们期望的方式呈现。 在Compose中&#xff0c;Row可以接受多个子组件作为参数&#xff0c;并根据指定的布局规则进行排列。…

桥梁监测方案-智慧桥梁监测管理系统

桥梁作为现代交通基础设施的重要组成部分&#xff0c;承载着大量的车辆和行人交通。然而&#xff0c;随着时间的推移&#xff0c;桥梁结构可能会受到自然环境、交通负荷和物质疲劳等因素的影响&#xff0c;从而导致潜在的风险和结构损坏。桥梁监测能够通过实时监测桥梁的结构状…

git一定要学会,加油

gitgit文档http://file:///F:/%E8%B5%84%E6%96%99%E5%A4%8D%E4%B9%A0/Git%E4%BC%98%E7%A7%80%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Git%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Pro%20Git%E4%B8%AD%E6%96%87PDF%E7%89%88.pdf init 初始化仓库 这个命令在当前目录下初始化一个 G…

安装Django 3.2的过程记录~

首先看下Django 3.2目前更新到哪些版本&#xff0c;用下面这条命令&#xff1a; pip install Django100.0.5与3.2有关的版本号有&#xff1a; 3.2a1, 3.2b1, 3.2rc1, 3.2, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.2.8, 3.2.9, 3.2.10, 3.2.11, 3.2.12, 3.2.13, …

MAC系统使用

查看端口占用情况 //如查看8080端口的占用情况 sudo lsof -i tcp:9901//比如我们想要释放Java占用的9901端口 PID 是 12420 kill -9 12420

C语言:写一个函数,实现一个整型有序数组的二分查找

题目&#xff1a; 写一个函数&#xff0c;实现一个整型有序数组的二分查找&#xff0c;找出要找的数字在数组中对应的下标。 思路&#xff1a; 总体思路&#xff1a; &#xff08;一&#xff09;自定义函数部分&#xff1a; &#xff08;1&#xff09;. 参数&#xff1a; int…

融云《社交泛娱乐出海作战地图》,手把手教你拿下出海“最后一公里”难题

社交泛娱乐出海&#xff0c;已然是当下互联网出海的主力。关注【融云全球互联网通信云】了解更多 不少国内互联网巨头都将社交泛娱乐作为海外市场重点布局赛道。从较为传统的音视频、短视频社交出海&#xff0c;到逐渐直播出海、元宇宙社交出海&#xff0c;社交泛娱乐出海版图…

微信小程序实现tab及瀑布流页面

一、效果 二、代码 复制代码可以直接用 1、json代码 {"usingComponents": {},"navigationStyle": "custom" } 2、xml代码 <!--pages/find_module/findPage.wxml--> <view class"container_serach"><!-- 搜索模块 -…

Java EE 企业级应用开发教程题库(第二版)

前言 Java EE这是一门偏向于实践的课&#xff0c;奈何考试理论居多。一学期想搞懂三个框架&#xff0c;嘿嘿&#xff0c;难哦&#xff01;如果你是大一大二的同学&#xff0c;认认真真学习&#xff0c;真的有用。如果你是大三的同学&#xff0c;像就业并且走这个方向的同学&…

VMware Horizon 8 运维系列(一)windows系统重启被禁用的ipv6功能

前言 Horizon 8 在创建桌面池之前,需要对模板虚拟机进行配置,其中会用到windows优化工具,通过禁用一些不必要的服务或功能,让系统达到优化的效果。 最近客户提出一个需求:需要对虚拟机开启ipv6功能,并同时使用ipv6地址。通过查看模板系统,ipv6已经被优化工具禁用,所以需…

SSM整合快速入门案例(二)

文章目录 前言一、表现层与前端数据传输协议定义二、表现层与前端数据传输协议实现三、异常处理器四、项目异常处理五、前后台协议联调实现CRUD- - 查询- - 添加- - 修改- - 删除 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c…

Netty核心源码剖析(五)

1.Netty核心组件EventLoop源码剖析 1>.NioEventLoop继承图 说明: ①.ScheduledExecutorService接口表示是一个定时任务接口,EventLoop可以接受定时任务; ②.EventLoop接口:Netty 接口文档说明该接口作用:一旦Channel注册了,就处理该Channel对应的所有I/O操作; ③.Single…

学成在线----day7

1、 视频处理-技术方案 1. 作业分片方案 掌握了xxl-job的分片广播调度方式&#xff0c;下边思考如何分布式去执行学成在线平台中的视频处理任务。 任务添加成功后&#xff0c;对于要处理的任务会添加到待处理任务表中&#xff0c;现在启动多个执行器实例去查询这些待处理任务…

FPGA基础知识-层次建模的概念

学习目标&#xff1a; 提示&#xff1a;这里可以添加学习目标 理解数字电路设计中自底向上和自顶向下的设计方法&#xff1b; 解释verilog中模块和模块实例之间的区别&#xff1b; 学习从4中不同的抽象角度来描述同一个模块&#xff1b; 解释仿真中的各个组成部分&#xf…

动态NAT过载配置与验证实验

动态NAT过载配置与验证实验 【实验目的】 部署端口地址转换。熟悉端口地址转换的应用方法。验证配置。 【实验拓扑】 实验拓扑如图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 f0/0 192.168.10.1 255.255.255.0 N/A …