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

NOI / 1.7编程基础之字符串 30:字符环 c语言 两次遍历解决循环

描述

有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。

输入

一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。

输出

输出一个整数,表示这两个字符环上最长公共字符串的长度。

样例输入

ABCEFAGADEGKABUVKLM MADJKLUVKL

样例输出

6
#include <stdio.h>
#include <string.h>
#define N 260

// 将字符串s重复两次,例如将abc变为abcabc
void doubleArr(char s[]) {
    int len = strlen(s);
    for (int i = 0; i <= len; ++i)
        s[i + len] = s[i];
}

int MAX(int a, int b) {
    return a > b ? a : b;
}

int main() {
    char s1[N], s2[N];
    int i1 = 0, i2 = 0, l1, l2, mxLen = 0; // i1, i2分别是s1, s2的下标 mxLen:最大公共子串长度
    scanf("%s %s", s1, s2);
    l1 = strlen(s1);
    l2 = strlen(s2);
    doubleArr(s1); // 将字符串变为原字符串重复2遍,即为用一维数组表示环形数组
    doubleArr(s2);
    for (int i1 = 0; i1 < l1; ++i1)
        for (int i2 = 0; i2 < l2; ++i2) {
            int j = 0; // j为公共子串长度,最长也就是l1和l2的较小值
            while (j < l1 && j < l2) {
                if (s1[i1 + j] == s2[i2 + j])
                    j++;
                else
                    break;
            }
            mxLen = MAX(mxLen, j);
        }
    printf("%d", mxLen);
    return 0;
}


http://www.kler.cn/news/149139.html

相关文章:

  • 11.27二叉查找树,遍历二叉树,层序(判断是不是完全二叉树),根据遍历序列重构二叉树,递归输入建树(树的定义,结构体细节,typedef)
  • Spring Boot进行单元测试,一个思路解决重启低效难题!
  • Docker compose启动服务遇到的问题
  • el-tabel实现拖拽排序
  • 绩效考核的基础及基本内容
  • NOI / 1.8编程基础之多维数组 提问24:蛇形填充数组 c语言
  • 进程和线程的关系
  • 力扣106. 从中序与后序遍历序列构造二叉树
  • linux(2)之buildroot使用手册
  • asp.net mvc游戏门户网站
  • 基于U2-Net如何训练一个一键抠图模型
  • 什么是量子优势?
  • 系列十六、Spring IOC容器的扩展点
  • vue3-10
  • 【C++】构造函数和析构函数第四部分(深拷贝和浅拷贝)--- 2023.11.25
  • Spring Boot 3 + Spring Security 6 最新版本修改 Json 登录后 RememberMe 功能问题失效的解决方案
  • NextJS开发:封装shadcn/ui中的AlertDialog确认对话框
  • windows系统mobaxterm远程执行linux上ssh命令
  • 中伟视界:AI智能分析盒子的人数统计AI算法通过什么算法模型可以解决重复统计的问题?
  • 【AI考证笔记】NO.1人工智能的基础概念
  • Mysql更新Blob存储的Josn数据
  • c++调用openssl对文件加解密
  • ubuntu配置免密登录vscode
  • 如何优化 Elasticsearch 查询性能
  • 华为P40无法链接adb的解决记录
  • 深度学习之六(自编码器--Autoencoder)
  • 面向植保任务的无人机集群系统及其应用研究
  • shell编程系列(4)-循环结构
  • Java第十二篇:连接安全版kafka(Kerberos认证)出现的问题解答
  • C++学习之路(十)C++ 用Qt5实现一个工具箱(增加一个时间戳转换功能)- 示例代码拆分讲解