HDU1238 最长公共子序列

【代码超详解】HDU 1238 Substrings(暴力枚举 + KMP) 一、题目描述 二、算法分析说明与代码编写指导 KMP 算法 最多 10 个样例,每个样例最多 100 个字串,每个字串最大长度为 100,数据规模足够暴力匹配。 从短到长枚举任意一个字符串(这里取第一个)的全部子串,用这个子串去匹配其它字符串。匹配成功就把该子串的长度记为答案。注意在原子串匹配失败时,还要尝试用这个子串的反串去匹配。 头文件 algorithm 里面有比较方便的 std::cop... 阅读详情

                      这题是个搜索题。主要思想就是:首先,找到输入字符串中最短的串;然后,枚举其子串和子串的反串。这里求子串要从长度最大到最小,

              因为要求的是最大子串。最后,判断枚举的子串是否是公共子串。若是,输出其长度,并结束;反之,继续求解。

                      在做题过程中遇到的问题就是,把bool flag1=false,flag2=false写到了for循环的外部,结果出现了莫名奇妙得错误!

             AC代码如下:

#include<iostream>
using namespace std;

struct node
{
	char ch[101];
	int len;
}str[100];

int length,n;   //length为最小串的长度
char tmp[101];  //放最小的串

void init()    //输入数据,并找的最小的串
{
	cin>>n;

	length=10000;
	for(int i=0;i<n;i++)
	{
		cin>>str[i].ch;
		str[i].len=strlen(str[i].ch);

		if(str[i].len<length)
		{
			length=str[i].len;
			strcpy(tmp,str[i].ch);
		}
	}
}

void deal_subs()
{
	int i,j,k,ii,jj;
	char rev[101],norm[101];  //norm为子串,rev放子串的反串
	char *st,*en;   //st子串开始的地址,en子串结束的地址

	j=0;
	i=length;
	while(i>=1)   //i记录子串的长度
	{
		st=tmp+j;
		if(i+j>length)  //子串的长度和子串开始的位置和必须小于最小串的长度,否则子串越界
		{
			j=0;
			i--;
			continue;
		}
		else
			en=st+(i-1);

		char *p1=st;
		k=0;
		while(p1!=(en+1))  //获得子串
		{
		    norm[k++]=*p1++;
		}
		p1=en;
		k=0;
		while(p1!=st)   //获得反串
		{
			rev[k++]=*p1--;
		}
		rev[k]=*p1;

		bool flag=false;  //判断子串或其反串是否是公共子串
		for(k=0;k<n;k++)  //判断子串或其反串,是否是公共子串
		{
			bool flag1=false,flag2=false;  //记录子串或其反串是否是某一输入数据子串

			for(ii=0;ii<=str[k].len-i;ii++)
			{
				if(norm[0]==str[k].ch[ii])
				{
					for(jj=0;jj<i;jj++)
					{
						if(norm[jj]!=str[k].ch[ii+jj])
							break;
						else if(jj==i-1)
							flag1=true;
					}
				}
				if(flag1) break;
			}

			if(!flag1)
			{
				for(ii=0;ii<=str[k].len-i;ii++)
				{
					if(rev[0]==str[k].ch[ii])
					{
						for(jj=0;jj<i;jj++)
						{
							if(rev[jj]!=str[k].ch[ii+jj])
								break;
							else if(jj==i-1)
								flag2=true;
						}
					}
					if(flag2) break;
				}
			}

			if(!(flag1 || flag2))  //若一子串或其反串不是至少一个输入数据的子串,则该子串不可能符合条件了
				break;

			if(k==n-1)   //找到公共子串
				flag=true;
		}

		if(flag)
		{
			cout<<i<<endl;  //找到公共子串,函数结束
			return;
		}

		j++;
	}

	cout<<0<<endl;  //没有公共子串
}

int main()
{
	int t_case;

	cin>>t_case;
	while(t_case--)
	{
		init();

		deal_subs();
	}

	return 0;
}


 

Android应用隐私合规自动化检测:Frida与Camille实战指南 在移动应用安全与隐私合规领域,动态代码插桩技术已成为核心检测手段。其原理是通过运行时注入,实时监控和修改应用行为,从而绕过传统静态分析的局限。这项技术的核心价值在于能够精准捕获应用在运行时的敏感数据调用与网络传输行为,为隐私合规审计、安全测试提供直接证据。在实际应用场景中,它尤其适用于自动化检测违规收集个人信息、追踪数据流向等任务。本文聚焦于利用Frida这一动态插桩框架,结合Camille隐私合规检测工具集,构建自动化监控环境。通过注入JavaScript代码,实现对Android敏感API(如获取设备标 阅读详情

相关推荐

峰值电流模式CCM BUCK的传递函数推导

电流内环闭环传递函数: Gci(s)=i^L(s)v^comp(s)=FmGid(s)1+KRiHe(s)FmGid(s)=1Ri11+s[mcL+(0.5VIN−Vo)RiVINRifSW]+s21(πfSW)2 G_{ci}(s)=\frac{\hat i_{L}(s)}{\hat v_{comp}(s)}=\frac {F_mG_{id}(s)}{1+KR_iH_e(s)F_mG_{id}(s)}=\frac{1}{R_i}\frac{1}{1+s[\frac{m_cL+(0.5V_{IN}-V_o)

c007106333的博客 2353

hdu 1238 字符串的简单运用

#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define eps 1e-10 #define maxl 3001

yellowjianokok的博客 398

CPG控制网络入门

从线性变换开始推导

妖米的博客 5043

hdu 1238(最长公共子序列变形)

1、http://acm.hdu.edu.cn/showproblem.php?pid=1238 2、题目大意: 给定n个字符串,求出最长的公共子序列,包括反转的也可以 本来觉得是动态规划解决,不过没对,后来看别人的代码,才发现其实就是一道暴搜的题目: 3、代码: #include #include #include using namespace std; string str[105

sdjzping的专栏 1821

MacBook用户必看:用Homebrew一键搞定frp内网穿透(含阿里云配置模板)

本文为MacBook用户提供基于Homebrew的frp内网穿透实战指南,详细介绍了从环境准备到阿里云服务器配置的全过程。通过Homebrew一键安装frp客户端,结合阿里云配置模板,实现高效稳定的内网穿透,适用于远程开发、IoT设备调试等多种场景。

weixin_28692817的博客 321

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 468

HDU 1238 Substrings(KMP)

该题可以用KMP,但是看网上很多人都是直接暴过去的,好像也差不了多少,可见数据之水。 找到所给字符串中对短的串,枚举其子串的首尾下标,然后取出来作为子串然后对每一个串做KMP,因为其逆序也可以,所以也要将其逆序单独取出来。 细节参见代码: #include #include #include #include #include #include #include #include #incl

AC_Arthur的专栏 813

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 535

HDU - 1238——Substrings (查找所有串中最长子串)

You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.InputTh...

creator平 784

拓竹P1S封神玩法|AI图生3D+精准修改全攻略,打孔/挖盖再也不用瞎琢磨!

AI图生3D建模结合后期修改,让拓竹P1S用户轻松实现创意打印。文章详细介绍了从照片拍摄、AI模型生成到后期修改的全流程:使用腾讯混元3D或Tripo3D快速生成3D模型,通过Blender或Fusion360进行精准打孔、挖盖子等修改,最后在OrcaSlicer中优化切片参数适配P1S打印。重点解决了AI模型无法直接打印的问题,提供了壁厚控制、孔径调整等实用技巧,并针对常见打印问题给出解决方案,帮助新手实现从AI生成到成品打印的无缝衔接。

2501_93651177的博客 1874

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

(HDU)1238 - Substrings 【KMP枚举】or【String】

给我们n个字符串,问我们其中最长公共子序列(包括反序列)长度是多少。然而并不是最长公共子序列问题。

Doge 680

软件可靠性测试与评价

本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。

moton2017的博客 2048

Hdu 1238 Substrings

题目大意:给你一系列的字符串,让你从中找寻最大子序列,反向相同也可以。思路:暴力枚举长度最小的字符串的所有情况,这里相当于剪枝。然后根据strstr(char *sz1, char *sz2)判断是否存在于其子串中。CODE:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<...

weixin_30256901的博客 114

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU 1238 Substrings 【c++ string】

Substrings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7450    Accepted Submission(s): 3361 Problem Description You are given a num

柚的个人技术博客 802

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

解题报告 (六) KMP

本文介绍一些KMP算法的常用题集

英雄哪里出来 13万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hdu 2328 Corporate Identity(kmp)

Problem Description Beside other services, ACM helps companies to clearly state their “corporate identity”, which includes company logo but also other signs, like trademarks. One of such companies is...

weixin_30916125的博客 108

HDU1238(模拟+枚举)

Substrings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5707    Accepted Submission(s): 2513 Problem Description You are given a num

晓风残月xj 849

hdu1238 字符串应用

题目地址:    http://acm.hdu.edu.cn/showproblem.php?pid=1238 首先将给定的字符串按照长度进行排列;         枚举最短的字符串;         对枚举的每个字符串在其它字符串中进行查找,查看是否是其它字符串的子串;         统计符合条件的字符串的长度,选取最大的长度. PS:不仅要比较子串,还要比较子串的反串. #i

计科菜鸟的天地. 869

HDU -1238 Substrings(暴力枚举每个子串)

Substrings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description You are given a number of case-sensitive strings of alphabetic characters, find t...

名字太长容易被发现并打死 422

hdu1238——暴力+kmp

题目链接:acm.hdu.edu.cn/showproblem.php?pid=1238 给你一个字母组成的字符串,找到这样最长的一个字符串X,它或将它左右颠倒形成的字符串是所给出任何字符串的子串 Input 第一行给一个整数t (1 <= t <= 10), 代表测试样例数。接下来有t组样例数据,第一行给出一个整数n, (1 <= n <= 100), 表示n个字符...

mumei的博客 263

HDU-1238 Substrings (kmp)

题意:求出所有串(或者其逆置串)的最长公共子串 思路:不由的想到了 POJ-3080 Blue Jeans 这道题, 其题意是找到所有串的最长公共子串。也是暴力截取(取其中一个串)然后循环匹配(匹配时用kmp取优化) 这里多了一个(匹配其逆置,即将所有的串均逆置存入string数组中来循环匹配即可) 完整代码: //字符串长为(1~100) 总字符串个数 n (1 &l...

206

HDU1238_搜索入门_暴力枚举

题目大意: 给你n个字符串,然后要求求一个最大的子串(或者子串的反串,子串可以倒过来的意思)在每个字符串中都出现。要求求这个子串的长度。 解题思路: 为了节省时间,先找出这些串中长度最短的,然后枚举这个串中的所有子串。再让这个子串或者反串去匹配每一个串,若都符合,即输出,然后退出。这里枚举,当然是从子串长度大的往小的枚举啦,节省时间。 不过还是写了3重for...

weixin_30396699的博客 103

hdu 1238

题意:找出最长的一个子串,所有串中都出现过它或它的逆序 思路:直接枚举子串的开头,然后用exkmp找最长的匹配长度。这题告诉我们exkmp找匹配长度好强。 #include <bits/stdc++.h> using namespace std; const int maxn = 105; vector<string> ve; char str1[maxn],str2...

ehdhg13455的博客 212

HDU1238

Substrings Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 3 Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size:

程序员の墨梅 559

hdu1238

/**/ #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;cmath&gt; #include &lt;cctype&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;map&gt; #include &lt;set&amp

oneplus123的博客 601
上一篇: HDU1035 四方向dfs
下一篇: HDU1072 nightmare
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值