查找两个字符串a,b中的最长公共子串

找出两个字符串的最长公共子串 题目: 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。 输入描述: 输入包括两行,第一行代表字符串srr1,第二行代表字符串str2。 1 ≤ length( str1), length(str2) ≤ 5000 输出描述: 输出包括一行,代表最长公共子串。 示例 输入 1AB2345CD 12345EF 输出 2345 解题思路 只需要几个变量,从右上角点开始,划“捺” 定义出发点,出发点一开始时(0,m-1) 出发点向左移动,遇到边界后向下移动 代码 阅读详情

题目:牛客网

解题思路:

使用动态规划,

2个字符串中短字符串的长度作为数组(record)的行数

长字符串的长度作为数组(record)的列数

判断两个字符是否相等,若不相等,record[i][j]=0;若相等,需要注意row==0或col==0的情况,此时,record[i][j]==1;

i!=0且j!=0的时候,record[i][j]=record[i-1][j-1]+1

 abcdef
a100000
a100000
b020000
c003000
 

 

import java.util.Scanner;

public class Main {
	public static void findLongestSequence(String str_short, String str_long){
		int row = str_short.length();
		int col = str_long.length();
		int[][] record = new int[row][col];
		int max_len = 0;
		int row_pos = 0;
		for(int i = 0; i < str_short.length(); i++ ){
			for(int j = 0; j < str_long.length(); j++){
				if(str_short.charAt(i) != str_long.charAt(j)){
					record[i][j]=0;
				}
				else{
					if(i == 0 || j == 0){
						record[i][j] = 1;
						if(max_len < record[i][j]){
							max_len = record[i][j];
							row_pos = i;
						}
					}
					else{
						record[i][j] = record[i-1][j-1]+1;
						if(max_len < record[i][j]){
							max_len = record[i][j];
							row_pos = i;
						}
					}
				}
			}
		}
		System.out.println(str_short.substring(row_pos+1-max_len,row_pos+1));
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
			String str1 = in.next();
			String str2 = in.next();
			int str1_len = str1.length();
			int str2_len = str2.length();
			if(str1_len > str2_len)
				findLongestSequence(str2,str1);
			else
				findLongestSequence(str1,str2);
			
		}
	}

}

 

【OJ】 查找两个字符串a,b中的最长公共子串(动态规划方法) 题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。OJ链接 示例: 输入: abcdefghijklmnop abcsafjklmnopqrstuvw 输出: jklmnop 解析 这道题用动态规划求解比较方便,定义MCS[i][j]记录短字符串 s1 前 i 个字符和长字符串 s2 前 j 个字符的最长子串的长度,初始化所有值为 0。当 s1[i-1] = s2[j-1]时MCS[i][j] = MCS[i - 1][j - 1] + 1,这里使用一个额外的值s 阅读详情

相关推荐

编程题——查找两个字符串a,b中的最长公共子串

编程题——查找两个字符串a,b中的最长公共子串 题目描述: 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 输入描述: 输入两个字符串 输出描述: 返回重复出现的字符 示例: 输入 abcdefghijklmnop abcsafjklmnopqrstuvw 输出 jklmnop 程序代码如下: #include <iostream> #in...

kevin980123的编程世界 3473

查找两个字符串的最长公共子串(附源码)_AX

查找两个字符串a,b中的最长公共子串【思路】遍历a的字符,每次取出一个字符与b进行匹配(遍历b),如匹配上,a,b同时后移一个字符,再循环遍历b进行匹配,直到匹配不上,把刚才匹配的公共字串与已知最长子串进行比较,如果它比最长子串还长,替换最长子串,如相等,也保存.【缺陷】本来优化了一下,减少了些不必要的循环次数,结果发现如果没有公共子串就会出现数组越界问题,可以改一下判断条件,但整个结构就会感觉很...

weixin_34133829的博客 250

Selenium自动化测试遇到shadow-root元素?3种实用解决方案帮你搞定

本文针对Selenium自动化测试中遇到shadow-root元素难以定位的常见问题,提供了三种实用的解决方案。详细阐述了通过JavaScript直接穿透Shadow DOM、利用浏览器工具快速获取JS Path以及使用Python第三方库进行优雅封装的方法,并分享了提升脚本健壮性的实战策略与最佳实践,帮助测试人员有效应对现代Web组件化开发带来的挑战。

code8的博客 408

求两个字符串的最长公共子串

题目: 查找两个字符串 s1,s2 中的最长公共子串 。 方法一: 嵌套循环,假设res为最终找到的子串。如果较长的字符串中包含较短的字符串的子串,且长度大于当前最大长度,则更新res 和 当前最大长度。 代码: public static void sameString(String s1,String s2){ String max = s1.length () > s2.length () ? s1 : s2; String min = s1.length ()

qq_43632625的博客 2932

YOLOv8模型部署与测试:保姆级教程(含Ultralytics配置避坑指南)

本文提供了一份详尽的YOLOv8模型部署与测试指南,涵盖环境配置、模型加载、参数优化、批量处理及API服务封装等关键步骤。重点分享了Ultralytics框架在实际部署中的常见问题与解决方案,帮助开发者高效完成从训练到生产的过渡,确保模型在真实场景中稳定运行。

weixin_29038155的博客 292

MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

weixin_49303682的博客 443

求两个字符串的最长公共子串(初学者适用)

求两个字符串的最长公共子串(初学者适用) 何为公共子串? 即两个字符串中相等且连续的子串。 例如:串“abcde”和串“gabfde”中公共子串有ab”和“cde”两个。 何为最长公共子串呢? 即在上述“公共子串”的定义中加上最长二字, 上面例子中“cde”便是最长公共子串。 基本算法思想 大致思路 假设有串str1和串str2。挨个找出str1和str2中所有的公共子串,在寻找过程中只记录下长度...

qq_44902646的博客 5019

【安全机制分析案例】从PDF预览页面提取原始PDF文件的方法原理与实践 篇二:基于致远互联(Seeyon)封装的SuwellLightRead技术

该HTML代码片段展示了致远OA协同办公系统的前端页面结构,包含多个CSS样式表和JavaScript文件的引用。页面设置了IE兼容模式,加载了全局环境变量、UI组件库和公告模块相关资源。代码中定义了系统路径、静态资源后缀等全局变量,并包含公告查看功能的相关配置参数。页面还引用了水印、文档处理、即时通讯等功能的JS文件,并设置了文件下载框架。整体呈现了一个典型的OA系统前端实现方案,包含浏览器兼容处理、资源加载和功能模块初始化等逻辑。

生活在别处 2072

【牛客刷题18】 查找两个字符串a,b中的最长公共子串

文章目录一、题目二、 题目分析1.常规思路一2.常规思路2 一、题目 题目链接:查找两个字符串a,b中的最长公共子串 二、 题目分析 两种思路,第一种常规思路,第二种动态规划。 1.常规思路一   通过遍历两个字符串str1与str2,同时维护左右两个指针,判断出重复最长的字符串即可。 遍历较短字符串的每个字符作为起点,不断进行子串的匹配 维护 左指针j,右指针k, 右指针逐渐向左逼近 满足子串匹配的同时还要满足子串长度是最大的 import java.util.*; public class Ma

weixin_46913665的博客 1361

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652

揭秘大厂 Unity 红点系统设计:别小看右上角那颗小红点,它能把你项目搞崩

本文详细探讨了游戏大厂如何设计高性能红点系统。红点作为提升用户活跃和转化率的重要工具,需要支持多级联动、动态判断和全局一致性。系统采用观察者模式和树形结构,分为数据管理、逻辑判定、订阅通知和UI展示四大模块,通过事件驱动方式实现高效刷新。文章特别强调了解耦设计、配置化管理和性能优化,并提出了热更新、数据分析等高级应用场景。最终指出,优秀的红点系统需要架构标准化、自动化配置和团队紧密协作,是大型游戏项目的关键技术基础。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 377

查找两个字符串a,b中的最长公共子串。

题目描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 首先找到a和b中最短的那个字符串。 这道题我觉得最巧妙的解法是利用了substr截取a中的字符串,每截取一部分就去b中查找,若在b中,就把最长的字符串保存起来。 另外需要注意的是find函数返回的是size_t类型的值,需要强转成int类型的。 具体代码如下: #include <iostr...

yam_sunshine的博客 1346

【Altium Designer】Off grid pin解决方法

​今天我画完原理图编译时,出现了太多的黄色(出现warning警告提示)Off grid pin警告,这个警告并不是原理图电气连接出问题了,而是元器件或器件PIN脚没有和栅格对齐造成的原因。再编译还是出现这个警告。 最后经过不断翻阅网上经验和实践,才最终解决,本经验详细记录了解决该警告的有效方法。 解决方案:以下是问题解决步骤... ​

夜半少年的博客 7546

HJ65 查找两个字符串a,b中的最长公共子串

HJ65 查找两个字符串a,b中的最长公共子串

NEFU AB-IN's Blog 384

流体动力学仿真软件:Star-CCM+_(1).Star-CCM+基础及入门

Star-CCM+的用户界面(UI)分为多个部分,包括菜单栏、工具栏、工作区、视图窗口和控制台。菜单栏包含文件、编辑、视图、工具等常用菜单。例如,“File”菜单可以用于打开、保存和退出项目。工具栏提供常用的工具按钮,如新建项目、打开项目、保存项目等。也可以自定义工具栏,添加常用的功能按钮。工作区显示当前项目的结构和各个对象。可以通过拖拽方式组织和管理项目中的各个部分。视图窗口显示几何模型、网格、结果等。可以通过不同的视图模式查看和分析数据。控制台显示软件的运行日志和输出信息。

kkchenjj的博客 1195

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【牛客网】查找两个字符串a,b中的最长公共子串

题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 输入描述:输入两个字符串 输出描述: 返回重复出现的字符 示例: 输入 abcdefghijklmnop abcsafjklmnopqrstuvw 输出 jklmnop 解题思路 暴力查找法:先比较两个字符串的长短,将较短的字符串存在s1中。再用两个循环对s1和s2分别进行遍历查找公共子串ret,将目...

ly_6699的博客 1241

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: palindrome-partitioning
下一篇: 字符串最后一个单词的长度
PMPWDF
博客等级 码龄10年 44粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值