首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每日算法刷题Day10-字符串最大跨距、最长公共字符串后缀

每日算法刷题Day10-字符串最大跨距、最长公共字符串后缀

作者头像
timerring
发布于 2022-09-27 13:17:48
发布于 2022-09-27 13:17:48
35500
代码可运行
举报
文章被收录于专栏:TechBlogTechBlog
运行总次数:0
代码可运行

CSDN话题挑战赛第2期 参赛话题:算法题解

⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。 🔥本文已收录于算法刷题系列专栏: 每日算法题解 欢迎订阅,持续更新。

文章目录

31.字符串最大跨距

有三个字符串 S,S1,S2,其中,S 长度不超过 300,S1 和 S2的长度不超过 10。

现在,我们想要检测 S1 和 S2 是否同时在 SS 中出现,且 S1 位于 S2 的左边,并在 S 中互不交叉(即,S1 的右边界点在 S2 的左边界点的左侧)。

计算满足上述条件的最大跨距(即,最大间隔距离:最右边的 S2 的起始点与最左边的 S1 的终止点之间的字符数目)。

如果没有满足条件的 S1,S2 存在,则输出−1。

例如,S= abcd123ab888efghij45ef67kl,S1= ab, S2= ef,其中,S1 在 S 中出现了 2 次,S2 也在 S 中出现了 2 次,最大跨距为:18。

输入格式

输入共一行,包含三个字符串 S,S1,S2,字符串之间用逗号隔开。

数据保证三个字符串中不含空格和逗号。

输出格式

输出一个整数,表示最大跨距。

如果没有满足条件的 S1 和 S2 存在,则输出 −1。

输入样例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
abcd123ab888efghij45ef67kl,ab,ef
输出样例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
18
思路

分别两次匹配字符串,s1从左向右匹配,s2从右向左匹配。再根据情况分别判断即可。重点在练,多敲几遍。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<bits/stdc++.h>
using namespace std;

int main()
{
    string s,s1,s2;
    char c;
    while(cin >> c, c != ',')s += c;
    while(cin >> c, c != ',')s1 += c;
    while(cin >> c)s2 += c;
    if(s.size()<s1.size() || s.size() < s2.size())puts("-1");
    else{
    
    int l = 0;
    for(;l + s1.size() <= s.size();l++)
    {
        int k = 0;
        for(; k < s1.size();k++)
        {
            if(s[l + k] != s1[k])break;
        }
        if( k == s1.size())break;
    }
    
    //s2从右向左找
    int r = s.size() - s2.size();
    for(; r >= 0 ;r--)
    {
        int k = 0;
        for(; k < s2.size();k++)
        {
            if(s[r+ k] != s2[k])break;
        }
        if( k == s2.size())break;
    }
    
    l += s1.size() - 1;
    
    if(l >= r)puts("-1");
    else printf("%d\n", r - l - 1);
    return 0;
    }
}

32.最长公共字符串后缀

给出若干个字符串,输出这些字符串的最长公共后缀。

输入格式

由若干组输入组成。

每组输入的第一行是一个整数 N。

N 为 0 时表示输入结束,否则后面会继续有 N 行输入,每行是一个字符串(字符串内不含空白符)。

每个字符串的长度不超过 200。

输出格式

共一行,为 N 个字符串的最长公共后缀(可能为空)。

数据范围

1≤N≤200

输入样例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3
baba
aba
cba
2
aa
cc
2
aa
a
0
输出样例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ba

a
思路

伪代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for( 枚举后缀长度)
	for(所有字符串)
		for(枚举str[0]与str[i]的n个字符)

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<bits/stdc++.h>
using namespace std;

const int N = 200;

int n;
string str[N];

int main()
{
    while(cin >> n, n)
    {
        int len = 1000;
        for(int i = 0; i < n; i++)
        {
            cin >> str[i];
            if(str[i].size() < len)len = str[i].size();
        }
        
        for(;len;len--)
        {
            
            bool success = true;
            for(int i = 0; i < n; i++)
            {
                bool is_same = true;
                for(int j = 1; j <= len ; j++)
                {
                    if( str[0][str[0].size() - j ] != str[i][str[i].size()- j])
                    {
                        is_same = false;
                        break;
                    }
                }
                if(!is_same)
                {
                    success = false;
                    break;
                }
                
            }
            if(success)break;
        }
        
        cout << str[0].substr(str[0].size() - len )<<endl;
        
    }
    return 0;
}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
每日算法刷题Day9-字符串移位包含问题、字符串乘方
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
timerring
2022/09/27
1.1K0
每日算法刷题Day9-字符串移位包含问题、字符串乘方
每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换
一般我们用 strcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0 为止。
timerring
2022/09/27
1.2K0
每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换
问题 C: 字符串的查找删除(字符串好题)
题目描述: 给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
杨鹏伟
2021/06/17
1.9K0
【CPP】《程序员面试金典》习题(1)——数组与字符串
意识到该刷刷算法题的自己,面临压力自然想到LeetCode,但是面对和LeetCode那数千道题,时间有限下自然要更有针对性些,自然就看到《程序员面试金典》。
ZifengHuang
2020/07/29
1.1K0
每日算法刷题Day8-统计最长连续字符、最长单词、倒排单词
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tabtab),如果这样的字符不止一个,则输出第一个。
timerring
2022/09/27
3350
每日算法刷题Day8-统计最长连续字符、最长单词、倒排单词
每日算法刷题Day6-循环相克令,字符串插入,单次字符出现
令词为“猎人、狗熊、枪”,两人同时说出令词,同时做出一个动作——猎人的动作是双手叉腰;狗熊的动作是双手搭在胸前;枪的动作是双手举起呈手枪状。
timerring
2022/09/27
2600
每日算法刷题Day6-循环相克令,字符串插入,单次字符出现
【C++】B2124 判断字符串是否为回文
我的第一种做法是通过反转字符串来判断回文。首先,我们将原字符串反转,然后与原字符串进行比较。如果反转后的字符串与原字符串相等,则说明原字符串是回文。
CSDN-Z
2025/02/04
2510
【C++】B2124 判断字符串是否为回文
c++字符串函数 --- substr()函数的用法
有关字符串截取函数的用法老不清晰。却总会时不时用到。例如蓝桥杯的一个大题想着用字符串截取函数substr()函数跑暴力匹配。结果却用错了…
杨鹏伟
2021/04/25
3.1K0
算法专题九: 哈希表与字符串
固定一个数, 找前面有没有target - x这个数, 使用哈希表, 每次查找之后把这个数丢入到哈希表中, 哈希表中存储这个数字的下标, 时间复杂度为O(N) , 空间复杂度也为O(N).
用户11317877
2024/10/22
1620
算法专题九: 哈希表与字符串
LeetCode 97. 交错字符串(DP)
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
Michael阿明
2020/07/13
3540
C++ 动态规划经典案例解析之最长公共子序列(LCS)_窥探递归和动态规划的一致性
动态规划处理字符相关案例中,求最长公共子序列以及求最短编辑距离,算是经典中的经典案例。
一枚大果壳
2023/08/18
7530
C++ 动态规划经典案例解析之最长公共子序列(LCS)_窥探递归和动态规划的一致性
C++014-C++字符串
在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/
IT从业者张某某
2023/10/16
2900
C++014-C++字符串
算法思想总结:字符串
思路1:两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀
小陈在拼命
2024/07/16
1210
算法思想总结:字符串
米哈游(原神)一面算法原题
一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
宫水三叶的刷题日记
2024/01/12
3600
米哈游(原神)一面算法原题
LeetCode 87. 扰乱字符串(记忆化递归 / DP)
给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。
Michael阿明
2021/02/19
4930
LeetCode 87. 扰乱字符串(记忆化递归 / DP)
10min快速回顾C++语法(五)字符串专题
⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。
timerring
2022/09/23
1K0
《算法竞赛进阶指南》0x18 总结与练习
这一天,刚刚起床的达达画了一排括号序列,其中包含小括号 ( )、中括号 [ ] 和大括号 { },总长度为
一只野生彩色铅笔
2022/10/31
1K0
《算法竞赛进阶指南》0x18 总结与练习
深度解析算法之字符串
输入: strs = [“flower”,“flow”,“flight”] 输出:“fl”
Undoom
2025/07/11
720
深度解析算法之字符串
LeetCode 算法 | 最长公共前缀?
首先,我们将描述一种查找一组字符串的最长公共前缀 LCP(S_1 \ldots S_n)LCP(S1…Sn) 的简单方法。 我们将会用到这样的结论:
技术从心
2019/08/06
8860
KMP算法
一个文本串$S$(主串)和一个模式串$P$,求$P$在$S$中出现的位置,或者$P$在$S$中出现的次数,等等问题。
xiaohejun
2020/02/18
5660
推荐阅读
相关推荐
每日算法刷题Day9-字符串移位包含问题、字符串乘方
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档