ACM-子串(字符串处理)

2023-11-17

问题描述

        有一些由英文字符组成的大小写敏感的字符串。请写一个程序,找到一个最长的字符串 x,使得:对于已经给出的字符串中的任意一个 y, x 或者是 y 的子串、或者 x 中的字符反序之后得到的新字符串是 y 的子串。

输入数据

       输入:输入的第一行是一个整数 t (1 <= t <= 10), t 表示测试数据的数目。对于每一组测试数据,第一行是一个整数 n (1 <= n <= 100),表示已经给出 n 个字符串。接下来 n 行,每行给出一个长度在 1 和 100 之间的字符串。

输出要求

       输出:对于每一组测试数据,输出一行,给出题目中要求的字符串 x 的长度;如果找不到符合要求的字符串,则输出 0。

输入样例

2
3
ABCD
BCDFF
BRCD
2
rose
orchid

输出样例

2
2

问题分析

        假设 x0 是输入的字符串中最短的一个, x 是所要找的字符串, x'是 x 反序后得到的字符串。显然,要么 x 是 x0 的子串、要么 x'是 x0 的子串。因此,只要取出 x0 的每个子串 x,判断 x是否满足给定的条件,找到其中满足条件的最长子串即。

解决方案

        每输入一组字符串后,首先找到其中最短的字符串 x0。然后根据 x0 搜索满足条件的子字符串。对 x0 的各子字符串从长到短依次判断是否满足条件,直到找到一个符合条件的子字符串为止。此问题的关键有两点:

1. 搜索到 x0 的每个子字符串,并且根据子字符串的长度从长到短开始判断,不要遗漏了任何子字符串。
2. 熟练掌握下列几个字符串处理函数,确保程序代码简洁、高效。

strlen:计算字符串的长度
strncpy:复制字符串的子串
strcpy:复制字符串
strstr:在字符串中寻找子字符串
strrev:对字符串进行反序

参考程序

#include <iostream>
#include <cstring> 
using namespace std;
int t,n;
char str[100][101];
int searchMaxSubString(char* source){
	int subStrLen,sourceStrLen;	
	int i,j;
	bool foundMaxSubStr;
	char subStr[101],revSubStr[101]; 
	subStrLen = sourceStrLen = strlen(source);
	while(subStrLen > 0){
		//搜索不同长度的子串,从最长的子串开始搜索
		for(i=0;i<=sourceStrLen - subStrLen;i++){
			//搜索长度为 subStrLen 的全部子串
			strncpy(subStr,source+i,subStrLen);
			strncpy(revSubStr,source+i,subStrLen);
			subStr[subStrLen]=revSubStr[subStrLen]='\0';//'\0'必须加 
			strrev(revSubStr);//反转字符串 
			foundMaxSubStr = true;
			//判断是否存在子串 
			for(j=0;j<n;j++){
				//不存在返回NULL
				if(strstr(str[j],subStr)==NULL && strstr(str[j],revSubStr)==NULL){
					foundMaxSubStr = false;
					break; 
				} 
			}
			if(foundMaxSubStr){
				return subStrLen;
			}
		}
		subStrLen--;
	}
	return 0;
}
int main()
{
	int i,minStrLen,subStrLen;
	char minStr[101];
	cin>>t;
	while(t--){
		cin>>n;
		minStrLen = 100;
		for(i=0;i<n;i++){
			cin>>str[i];
			//寻找输入字符串中的最短字符串
			if(strlen(str[i])<minStrLen){
				strcpy(minStr,str[i]);
				minStrLen = strlen(str[i]); 
			}
		}
		//搜索满足条件的最长字符串
		subStrLen = searchMaxSubString(minStr);
		cout<<subStrLen<<endl;
	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ACM-子串(字符串处理) 的相关文章

  • C++ 最长回文串

    已知一个只包括大小写字符的字符串 求用该字符串中的字符可以生成的最长回文字符串的长度 例如 s abccccddaa 可生成的最长回文字符串长度为9 如dccaaaccd adccbccda acdcacdca等 都是正确的 利用字符哈希方
  • hdu 1080 Human Gene Functions

    Problem acm hdu edu cn showproblem php pid 1080 Meaning 给出一个二维表 similarity 表示对应核苷酸配对时的相似度值 横杠 表示用空格代替一个核苷酸 给出两个DNA序列 a 和
  • 微信小程序富文本标签rich-text的使用

    wxml 接收对象数组
  • C语言面试题之字符串操作

    今 天做了花了几分钟做了三道C语言面试题 跟大家分享一下 找错 Void test1 char string 10 char str1 0123456789 strcpy string str1 答 string 大小不够 str1末尾还有
  • C/C++2019秋招面试题集合01

    C C 2019秋招面试题集合01 8 19 腾讯 提前批 客户端开发 1 给定一个字符串数组 和一个子串 求字符串中是否存在子串 如果存在则返回首个匹配到的索引位置 否则 返回 1 不能调用库函数 例如 字符串数组 Integrity P
  • “字符串的展开”【题解】

    字符串的展开 的题目 题目 题目描述 在初赛普及组的 阅读程序写结果 的问题中 我们曾给出一个字符串展开的例子 如果在输入的字符串中 含有类似于 d h 或者 4 8 的字串 我们就把它当作一种简写 输出时 用连续递增的字母或数字串替代其中
  • Leetcode刷题316. 去除重复字母

    给你一个字符串 s 请你去除字符串中重复的字母 使得每个字母只出现一次 需保证 返回结果的字典序最小 要求不能打乱其他字符的相对位置 注意 该题与 1081 https leetcode cn com problems smallest s
  • Android-CMakeLists.txt 链接第三方库(动态或者静态库)到自己的生成库中

    最近在做关于NDK开发的项目 编译方式通过cmake 如何将第三方动态链接库连接到自己生成的动态库中 按照以下步骤 1 首先看目录结构 首先将第三方库复制到jniLibs下 并创建对应的CUP平台目录 2 CMakeLists txt 方式
  • AC自动机 (多模式匹配)

    AC自动机 感谢博主 https blog csdn net bestsort article details 82947639 感谢博主 https fanfansann blog csdn net article details 106
  • 数组--二维数组

    JAVA的二维数组 二维数组 在二维数组中的每一个元素中都是一个一维数组 意思就是两个一维数组相嵌套而成的数组 二维数组的声明 有一下两种 int a int a 在声明时 一般推荐第一种情况 方便代码阅读 二维数组在创建时也要给定数组的长
  • list转json字符串

    使用Gson把list转成json字符串 com google gson Gson GetMapping valueTest public String valueTest List
  • Date类型与字符串的相互转换

    Date时间类型与字符串的相互转换 Test public void date throws ParseException 一 Date时间类型转字符串 1 获取当前时间 Date date new Date 2 设定时间格式 下面两行可以
  • Ugly Numbers

    题目描述 Ugly numbers are numbers whose only prime factors are 2 3 or 5 The sequence 1 2 3 4 5 6 8 9 10 12 shows the first 1
  • cookie格式化

    字符串转成字典 使用场景 selenium尝试试用cookie登陆时 Network中cookie是一段字符串 需要转成字典使用 使用split和列表解析式 str thor 8954F43 Id d32def3ffSNw pn adsad
  • 判断字符串是否为数字

    不迷迷糊糊 直接整代码 判断字符串是否是数字 判断是否为数字 是 返回true param str return public static boolean isNumeric final String str null or empty
  • 元字符的详细解析

    上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义 但是如果我们只知道那些元字符的含义 不知道怎么使用和加以练习 那么对于正则我们还只是看见了门槛 并没有踏入 那么本篇文章就让我们迈起脚步正式走入正则的世界吧 let s go 我的学
  • Python基础数据类型之字符串(一)

    Python基础数据类型之字符串 一 一 字符串格式化 1 字符串占位符 2 字符串格式化操作 二 f string格式化 三 字符串的索引 四 字符串的切片 1 常规切片使用方法 3 步长的介绍 2 切片使用方法二 一 字符串格式化 1
  • 力扣 942. 增减字符串匹配 双指针解法C++

    给定只含 I 增大 或 D 减小 的字符串 S 令 N S length 返回 0 1 N 的任意排列 A 使得对于所有 i 0 N 1 都有 如果 S i I 那么 A i lt A i 1 如果 S i D 那么 A i gt A i
  • java中null和isEmpty的区别

    isEmpty 分配了内存空间 值为空 是绝对的空 里面的值为空 分配了内存空间 值为空字符串 是相对的空 里面的值为空 null 未分配内存空间 没有值 是一种无值 值不存在 结论 null只能分辨出值是否分配内存空间 isEmpty不能
  • C语言实现随机发纸牌

    C语言实现随机发纸牌 为避免重复发牌 设二维数组sign 4 13 记载是否发过纸牌 其中行下表表示花色 列下标表示点数 设字符串指针数组card n 存储随机发的n张纸牌 例如card 0 梅花2 按照以下方法以此发出每一张牌 首先产生一

随机推荐

  • windows使用小技巧 ━━ Windows 10 HEVC扩展要收费怎么办?教你怎么免费下载HEVC扩展

    现在最新的方法 Download K Lite Codec Pack Full 可以无视下面的内容 平时我一般都使用potplayer打开视频 但在整理视频的时候mov格式的文件总是不能显示缩略图 如果用windows10自带图片查看器打开
  • 2013-2020年全国31省数字经济数据集

    1 时间 2013 2020年 2 来源 整理自国家统计J和统计NJ 3 指标包括 信息化基础 光缆线路长度 公里 移动电话基站 万个 信息传输 软件和信息技术服务业城镇单位就业人员 万人 年末常住人口 万人 城镇单位就业人员 万人 光缆密
  • AcWing 1247. 后缀表达式

    老师的讲课网址 https www acwing com video 736 第二个图就已经告诉我们只要有一个减号 我们就可以组成至少含一个减号的所有组合 比如说一个减号三个加号我们可以组合成 1 2 3 4 所以代码如下 include
  • The 2022 ICPC Asia Xian Regional Contest--G. Perfect Word

    You are given nn strings and required to find the length of the longest perfect word A string t is called a perfect word
  • caffe: test code 执行出问题: Check failed: FLAGS_weights.size() > 0 (0 vs. 0) Need model weights to score...

    Check failed FLAGS weights size gt 0 0 vs 0 Need model weights to score 出现这个错误 但是我记得昨天还好好的 网上搜了也没有答案 后来仔细检查才发现 原来存放 caff
  • QT5.9.4 + opencv3.0.0编译配置

    QT5 9 4 opencv3 0 0编译配置 1 安装QT5 9 4 QT下载地址 http download qt io archive qt 安装完毕之后将以下目录加入到系统环境变量 E Qt Qt5 9 4 5 9 4 mingw5
  • windows系统pycharm安装,opencv安装,anaconda安装

    1 python IDE安装 3 9 https www python org getit 2 pycharm安装 社区版最新 https www jetbrains com pycharm 3 anaconda3安装 https www
  • Electron 自定义 Dock 图标

    转载自https cloud tencent com developer article 1650700 学透 Electron 自定义 Dock 图标 Mac OS 做为前端开发者的首选操作系统相信大家再熟悉不过了 在电脑主界面的底部可以
  • epoll在多线程中的应用-EPOLLEXCLUSIVE和REUSEPORT(一)

    以下均为对epoll在多线程中的使用的一些笔记 如果有不对的地方 烦请指出 主要对于我所遇到的问题进行讨论 不会讨论代码如何改写 探讨如何解决这个问题 一 引言 这些问题均是我在编写我的Web服务器遇到的 我在编写多线程Web服务器的时候
  • Docker 镜像库国内加速的几种方法

    概述 在国内 拉取 Docker 镜像速度慢 时不时断线 无账号导致限流等 比较痛苦 这里提供加速 优化的几种方法 梳理一下 会碰到以下情况 国内下载速度慢 时不时断线 是因为网络被限制了 没有公共镜像库账号导致限流 是因为 Docker
  • 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目

    本文主要介绍如何用vue开发的标准化工具vue cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程 文章目录 一 准备工作 安装node js 二 项目搭建 创建项目目录 全局安
  • 谁来教我渗透测试——黑客应该掌握的Windows基础

    今天我们看看作为一个黑客对于Windows应该掌握哪些基础知识 主要内容包含以下四个方面 系统目录 服务 端口和注册表 黑客常用的DOS命令及批处理文件的编写 黑客常用的快捷键 以及如何优化系统 登录密码破解 手动清除木马病毒 系统目录 服
  • 2014年总结

    总结的意义在于认清未来的方向 2014年工作 1 ETL Data Warehouse Data Mining 数据挖掘内容很多 如何与企业需求相结合是重点 2 简单的工作流系统开发 3 体会ArgGIS在物流运输企业中的应用 无论云计算以
  • 色彩空间与像素格式

    转载来自 https www cnblogs com leisure chn p 10290575 html 1 色彩空间基础 颜色是不同波长的光对人眼刺激产生的色彩感觉 色彩空间 Color Space 是颜色的数学表示 根据不同的表示方
  • PSO优化LSTM

    有两个py文件 PSO 1和LSTM 1 在资源那里下载 有数据 环境 python TF2 优化的参数有 神隐藏神经元个数 dropout比率 batch size 这个可以根据自己的意愿改 规定上限和下限 UP 64 0 14 32 D
  • java跨时区问题【相差8小时】

    情况一 后端传递给前端 前端展示到页面中的时间与系统时间相差8小时 解决方法 在该类的日期属性字段上加上注解 JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 情况二 展示数据时间与
  • 解决Chrome, NET::ERR_CERT_AUTHORITY_INVALID

    文章目录 前言 解决方法一 解决方法二 总结 前言 解决方法一 首先清理一下缓存 三个点 gt 设置 gt 清除浏览数据 即可 如果还解决不了 因为Chrome是默认使用HSTS传输 严格的http传输方式 解决方法二 在Chrome浏览框
  • C++如何切割String对象

    C 如何切割String对象 C 相较于Java Python 并没有提供的字符串分割的函数split 因此需要自己进行编写 在实际的工作中这一功能会被经常使用 所以进行简单的记录一下 核心函数 代码实现的函数是调用String库中的fin
  • 数学:矩阵求导

    矩阵Y对标量x求导 Y y ij dY dx dy ji dx 求导后 Y变转置了 标量y对矩阵X求导 dy dX Dy Dx ij 求导后 不需要转置 重要结论 y U XV u i x ij v j 于是 dy dX u i v j U
  • ACM-子串(字符串处理)

    问题描述 有一些由英文字符组成的大小写敏感的字符串 请写一个程序 找到一个最长的字符串 x 使得 对于已经给出的字符串中的任意一个 y x 或者是 y 的子串 或者 x 中的字符反序之后得到的新字符串是 y 的子串 输入数据 输入 输入的第