对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
 
示例 1:
输入:str1 = "ABCABC", str2 = "ABC"
输出:"ABC"

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

示例 3:
输入:str1 = "LEET", str2 = "CODE"
输出:""

 
提示:

 1 <= str1.length <= 1000
 1 <= str2.length <= 1000
 str1[i] 和 str2[i] 为大写英文字母
 
解题思路
用时100%,内存100%,没看题解,写了一个半小时,本以为是一道简单题,没想到坑还挺多。
首先说思路:我分两了三种情况,分别是长度相等,len1>len2,len2>len1
先求最大公约数,用maxSubString来记录最长字符串
1.如果相等,就用strcmp比较,如果strcmp == 0,就说明两个字符串完全相同,标志一下flag = 3
2.如果len1 > len2,从以len2为标准进行遍历,如有不同,跳出,这时的i是小于len2的,然后再判断长字符串的下一个字符是否是短字符串的第一个字符,主要防止ABCDEF  ABC这种情况,如果是这种情况,用flag = 1标记一下
3.如果len2 < len1同理
最后根据标志flag的情况以及i是否等于短字符串的长度返回相应的字符串
注意:maxSubString要用指针定义,然后申请内存空间,不能直接用maxSubString[1000],因为如果用数组定义,它是一个局部变量,则它再函数结束后会接着释放掉,则主程序接收到的就是NULL,所以需要用指针,虽然指针maxSubString也是局部变量在函数结束后也会消失,但是它可以将地址返回到主程序,主程序就可以通过该地址找到字符串。
 
 1 char* gcdOfStrings(char* str1, char* str2)
2 int i = 0;
3 int len1 = strlen(str1);
4 int len2 = strlen(str2);
5 int lenFir = len1;
6 int lenSec = len2;
7 char *maxSubString;
8 int gcd, flag = 0;
9 int j;
10
11 maxSubString = (char *)malloc(sizeof(char) * 1000);
12 memset(maxSubString, 0, 1000);
13 gcd = len1 % len2;
14 while (gcd != 0)
15 {
16 len1 = len2;
17 len2 = gcd;
18 gcd = len1 % len2;
19 }
20 if (lenFir > lenSec)
21 {
22 for (i = 0; i < strlen(str2); i++)
23 {
24 if (str2[i] != str1[i])
25 break;
26 }
27
28 if (str1[i] != str2[0]) //比较长字符串的下一个字符是否等于短字符串的第一个字符
29 {
30 flag = 1;
31 }
32 }
33 else if(lenFir < lenSec)
34 {
35 for (i = 0; i < strlen(str1); i++)
36 {
37 if (str1[i] != str2[i])
38 break;
39 }
40
41 if (str1[0] != str2[i])
42 {
43 flag = 2;
44 }
45 }
46 else if(lenFir = lenSec)
47 {
48 if (strcmp(str1, str2) == 0)
49 {
50 flag = 3;
51 }
52 }
53
54 for (j = 0; j < len2; j++) //最长字符串 len2是最大公约数
55 {
56 maxSubString[j] = str2[j];
57 }
58
59 if (i==strlen(str2) && flag==0 || i==strlen(str1) && flag==0)
60 {
61 return maxSubString;
62 }
63 else if (flag == 3)
64 {
65 return str2;
66 }
67 else
68 {
69 return "";
70 }
71
72 }
 
 
 

(Good topic)字符串的最大公因子 (3.21leetcode每日打卡)的更多相关文章

  1. LeetCode 1071. 字符串的最大公因子(Greatest Common Divisor of Strings) 45

    1071. 字符串的最大公因子 1071. Greatest Common Divisor of Strings 题目描述 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连 ...

  2. [每日一题系列] LeetCode 1071. 字符串的最大公因子

    题目 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 "T 能除尽 S". 返回最长字符串 X,要求满足 X 能除尽 ...

  3. [LeetCode]1071. 字符串的最大公因子(gcd)

    题目 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 "T 能除尽 S". 返回最长字符串 X,要求满足 X 能除尽 ...

  4. [Swift]LeetCode1071.字符串的最大公因子 | Greatest Common Divisor of Strings

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. P1664 每日打卡心情好

    题目背景 在洛谷中,打卡不只是一个简单的鼠标点击动作,通过每天在洛谷打卡,可以清晰地记录下自己在洛谷学习的足迹.通过每天打卡,来不断地暗示自己:我又在洛谷学习了一天,进而帮助自己培养恒心.耐心.细心. ...

  6. (leetcode每日打卡)秋叶收藏集【动态规划】

    LCP 19.秋叶收藏集 题目链接 算法 动态规划 时间复杂度O(n) 1.题目要求最终形成[红.黄.红]三部分,每部分数量可以不相等,问最终调整操作数量最小是多少.这道题一开始考虑暴力去做,枚举两个 ...

  7. 【LeetCode】2020-03 每日一题

    121. 买卖股票的最佳时机(简单) [分类]:模拟.思维 [题解]:可以用O(n)的复杂度完成,只需要在遍历的时候记录到当前位置为止买入股票的最小价格minn,再维护一个当前卖出股票价(a-minn ...

  8. Discuz! X3 数据表、数据字段说明

    pre_common_admincp_cmenu 后台菜单收藏表 字段名 数据类型 默认值 允许非空 自动递增 备注 id smallint(6) unsigned    NO 是   title v ...

  9. Discuz! X3 数据字典

    pre_common_admincp_cmenu 后台菜单收藏表 字段名 数据类型 默认值 允许非空 自动递增 备注 id smallint(6) unsigned    NO 是   title v ...

  10. MQTT 3.1协议非严肃反思录

    前言 MQTT 3.1协议在弱网络环境下(比如2G/3G等)表现不够好,因此才有了反思. 弱网环境下表现 手机等终端在弱网络环境下丢包情况会非常明显,连接MQTT Server成功率很低.相比单纯的请 ...

随机推荐

  1. Flutter系列文章-Flutter进阶

    在前两篇文章中,我们已经了解了Flutter的基础知识,包括Flutter的设计理念.框架结构.Widget系统.基础Widgets以及布局.在本文中,我们将进一步探讨Flutter的高级主题,包括处 ...

  2. iframe与主窗口通信

    1. 引言 <iframe> 元素是 HTML 中的一个标签,用于在当前页面中嵌入另一个页面 使用 <iframe> 可以实现以下功能: 嵌入其他网页:可以将其他网页嵌入到当前 ...

  3. SPI总线学习笔记

    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空 ...

  4. PyQt5调用主窗口

    import sysfrom ui.MainWindow import Ui_Form from PyQt5.QtWidgets import QApplication, QMainWindowcla ...

  5. fastapi之helloworld

    简介 以下简介来自官网描述: FastAPI是一个用于构建API的现代.快速(高性能)的web框架,使用Python3.6+并基于标准的Python类型提示. 关键特性: 快速:可与NodeJS和Go ...

  6. JS中文件相关的知识(一):MIME类型

    不知道有没有同学和我一样,写代码时一遇到文件操作就犯怵,必须要先去把知识补一遍再说:对于Content-Type.responseType.ArrayBuffer.buffer.blob.file等这 ...

  7. 响应式编程——初识 Flux 和 Mono

    by emanjusaka from ​ https://www.emanjusaka.top/archives/4 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请留下原文地址. 前言 Reactor ...

  8. dedebiz发布文章自动提交到百度搜索的方法

    修改程序文件 依次打开/admin/article_add.php和article_edit.php 找到ClearMyAddon($id, $title); 在其上面加入 //自动提交到百度 els ...

  9. 「joisc 2019 - d2t2」ふたつの料理 Two Dishes

    [link.](E - ふたつの料理 (Two Dishes) (atcoder.jp) 我要放假 神仙题. 首先可以把两根轴拉成平面(which is a common trick),把决策的过程看 ...

  10. [HNCTF 2022 WEEK2]e@sy_flower

    花指令分析 如果没接触过花指令,先看这个博客,大致了解一下花指令 https://www.cnblogs.com/Here-is-SG/p/15802040.html 点击此处下载附件 查壳 32位, ...