数组中两个字符串的最小距离(图+文字详解)

news2024/11/25 15:20:35

链接:数组中两个字符串的最小距离__牛客网

题目:给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。

思路:

给定两个下标,分别是prev1,prev2,各代表str1和str2在遍历过程中上次出现的位置,(prev1,prev2指针解释:比如我遍历strs的时候遍历到了下标3,前面(左边)下标2所指是str2,那么prev2=2),这里prev1,prev2下标意义很重要),第二步,开始遍历到i下标时i下标必须是两个目标字符串之一,此时要观察i下标左边出现的与i下标相比另一个目标字符串的下标,并更新prev1或者prev2,不懂文字没关系有

图例:

假设QWER和666是str1和str2   ret是最小距离结果

 

这里我们应该把prev1更新成0,因为下标0是目标字符串,而且所指QWER,对于后面的666是最近的

继续遍历,找到下一个目标字符串,此时i指向666,此时prev1已经不是-1,代表QWER已经在左边出现过了,可以求距离,更新ret值,特别注意这时候的666下标对于后面的QWER是最近的,所以要更新prev2的下标

 继续遍历,i下标指向了QWER,这时候我们可以观察prev2值不是-1,证明666出现过了,可以求距离更新ret,但是别忘了更新prev1的下标,最后遍历完毕返回ret值

代码 

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String str1=in.next();
        String str2=in.next();
        String [] strs = new String[n];
        for (int i = 0; i < n; i++) {
            strs[i]= in.next();
        }
        //start
        int prev1=-1,prev2=-1,ret=Integer.MAX_VALUE;
        for (int i=0;i<strs.length;i++) {
            if(strs[i].equals(str1)){
                prev1=i;//更新prev1
            }
            if(strs[i].equals(str2)){
                prev2=i;//更新prev2
            }
            //如果prev1和prev1都不是-1可以更新ret
            if(prev1!=-1&&prev2!=-1) ret=Math.min(ret,Math.abs(prev1-prev2));
        }
        if(prev1==-1||prev2==-1)System.out.println(-1);//有一个字符串没有
        else System.out.println(ret);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm 随时调整字体大小(放大或缩小)

实现按住 ctrl 滑动鼠标滚轮实现代码窗口字体大小调整&#xff1a; File 一>Settings 一>Editor一>General里 的Mouse Control把Change font size with CtrlMouse Wheel打上对勾&#xff0c;点击OK即可 使用快捷键 放大字体&#xff1a; Windows/Linux: Ctrl macOS…

IP报文格式、IPv6概述

IPv4报文格式 IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下)&#xff0c;下面来逐一介绍首部各个字段的含义 Version版本&#xff1a;表示采用哪一种具体的IP协议&#xff0c;对于IPv4来说该字段就填充4以表示&#xff0c;如果是IPv6就填充6IHL首部长度&#xff…

Android内容观察者(案例:监听数据库+代码+效果图)

目录 1.内容观察者概念 1. 什么是 ContentObserver&#xff1f; 2. 主要方法 3. 使用场景 4. 工作原理 5. 注册和注销 6. 实现步骤 7. 注意事项 2.创建内容观察者 3.注册内容观察者 4.取消注册内容观察者 5.完整的activity代码 6.案例:检测数据库 1&#xff09;创建一个Android…

HTML(五)列表详解

在HTML中&#xff0c;列表可以分为两种&#xff0c;一种为有序列表。另一种为无序列表 今天就来详细讲解一下这两种列表如何实现&#xff0c;效果如何 1.有序列表 有序列表的标准格式如下&#xff1a; <ol><li>列表项一</li><li>列表项二</li>…

Linux下CMake入门

CMake的基础知识 什么是 CMake CMake 是一个跨平台的构建工具&#xff0c;主要用于管理构建过程。CMake 不直接构建项目&#xff0c;而是生成特定平台上的构建系统&#xff08;如 Unix 下的 Makefile&#xff0c;Windows 下的 Visual Studio 工程&#xff09;&#xff0c;然后…

《OpenCV计算机视觉》—— 人脸检测

文章目录 一、人脸检测流程介绍二、用于人脸检测的关键方法1.加载分类器&#xff08;cv2.CascadeClassifier()&#xff09;2.检测图像中的人脸&#xff08;cv2.CascadeClassifier.detectMultiscale()&#xff09; 三、代码实现 一、人脸检测流程介绍 下面是一张含有多个人脸的…

电子电气架构---软件定义汽车,产业变革

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

影刀RPA实战:操作Mysql数据库

1.摘要 影刀RPA&#xff08;Robotic Process Automation&#xff09;是一种软件自动化工具&#xff0c;它可以模拟人类用户执行各种重复性任务&#xff0c;其中包括对数据库的操作。 我们可以使用软件自动化指令&#xff0c;通过获取数据库窗口对象来操作数据库&#xff0c;也…

JSP 的 response 和 session 内置对象

文章目录 前言一、response 内置对象 1.重定向网页2.处理 HTTP 文件头3.设置输出缓存二、session 内置对象 1.创建及获取客户会话2.会话中移动指定的绑定对象3.销毁 session 内置对象4.会话超时的管理5. session 对象的应用总结 前言 JSP 的 response 和 session 内置对像&…

linux tar 打包文件去掉文件所在路径

一、准备目录 /root/tmp/images /root/tmp/images2 执行命令打包目录/root/tmp/images 到 /root/tmp/images.tar.gz 再解压到/root/tmp/images2 cd /root/tmp/images && tar -cvzf images.tar.gz * && mv images.tar.gz /root/tmp/ tar -C /root/tmp/image…

ctf.bugku-baby lfi 2

题目来源&#xff1a;baby lfi 2 - Bugku CTF平台 访问页面 翻译解析&#xff1a;百度翻译-您的超级翻译伙伴&#xff08;文本、文档翻译&#xff09; (baidu.com) LFI Warmups- level 2 -本地文件包含&#xff08;Local File Inclusion&#xff0c;简称LFI&#xff09; Hello…

力扣面试150 交错字符串 二维DP

Problem: 97. 交错字符串 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {public boolean isInterleave(String s1, String s2, String s3) {int m s1.length();int n s2.length();if(s3.length() ! m n) return false;boolean[][] dp new boolean[m1][n1];dp[0]…

ZYNQ使用XGPIO驱动外设模块(后半部分)

目录 注意重点&#xff1a; 一、SDK代码开发部分&#xff1a; 显示所需的字符编码&#xff1a; 1.用于显示8x16的字符函数&#xff1a; 2.绘制图片: 3.清楚给定两个坐标之间的显示&#xff1a; 4.显示16*32的阿拉伯数字字符&#xff1a; 5.显示16*32的整型数字&#xff…

Excel:vlookup函数实现查找

1.要查找宋江的英语&#xff0c;把鼠标放在对应单元格然后开始编辑 2.选中所选区域&#xff0c;点击F4锁定区域&#xff0c;不然下拉填充的时候会变VLOOKUP 在查找时有严格要求&#xff0c;查找值必须在所选区域的第一列&#xff0c;因此如果你的查找值不在第一列&#xff0c;可…

TGRS 2024 面向雾天遥感图像的定向目标检测算法

TGRS 2024 | 面向雾天遥感图像的定向目标检测算法 论文信息 摘要 目前&#xff0c;大量工作集中在航空目标检测上&#xff0c;并取得了良好的结果。尽管这些方法在传统数据集上取得了有希望的结果&#xff0c;但在恶劣天气条件下捕获的低质量图像中定位对象仍然具有挑战性。目…

RabbitMQ 入门(四)SpringAMQP五种消息类型

一、WorkQueue(工作消息队列) Work queues&#xff0c;也被称为&#xff08;Task queues&#xff09;&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于…

【亲测可行】ubuntu下载安装c++版opencv4.7.0和4.5.0 安装opencv4.5.0报错及解决方法

文章目录 &#x1f315;系统配置&#x1f315;打开终端&#xff0c;退出anacoda激活环境(如果有的话)&#x1f315;安装依赖&#x1f319;安装g, cmake, make, wget, unzip&#xff0c;若已安装&#xff0c;此步跳过&#x1f319;安装opencv依赖的库&#x1f319;安装可选依赖 …

关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多&#xff0c;大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。 MD5弱比较 比较的步骤 在进行弱比较时&#xff0c;PHP会按照以下步骤执行&#xff1a; 确定数据类型&#xff1a;检查参与比较的两…

要笑死了java

有一天&#xff0c;Java开发者Jack对他的朋友说&#xff1a;“最近我总感觉自己被逼得喘不过气。” 朋友问&#xff1a;“为什么啊&#xff1f;” Jack叹了口气道&#xff1a;“因为我一直在try里&#xff0c;但从来没有catch到过break&#xff01;” 为什么程序员总是分不清圣…

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化 零、前言 最近换了Linux系统&#xff0c;但是写教程做PPT的时候还是得用到绘图软件&#xff0c;上网一查&#xff0c;总结对比之后发现Krita比较好用&#xff0c;故此讲解一下如何安装和汉化Krita。 壹、安装 安装很简…