「笔试刷题」:数组中两个字符串的最小距离

校招算法笔试通关指南:高频考点拆解与实战答题策略 算法与数据结构是技术校招笔试的核心基础,也是考察候选人工程思维的重要方式。理解经典算法原理,如KMP、堆排序、并查集等,不仅有助于应对名企真题,更能提升解决实际工程问题的效率。本文从出题人视角,系统梳理校招算法卷的考点优先级与时间分配策略,剖析KMP的next数组、堆排序的siftDown、并查集优化等高频模板的工程意义,并总结双指针、动态规划、图论等题型的实战拆解方法。无论你是应届生还是在职工程师,掌握这些基础算法与答题策略,都能帮助你在有限时间内稳定发挥,拿到理想offer。 阅读详情

一、题目
 

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

输入描述:
输入包含有多行,第一输入一个整数n(1≤n≤105)(1 \leq n \leq 10^5)(1≤n≤105),代表数组strs的长度,第二行有两个字符串分别代表str1和str2,接下来n行,每行一个字符串,代表数组strs (保证题目中出现的所有字符串长度均小于等于10)。

输出描述:
输出一行,包含一个整数,代表返回的值。

示例1

输入

1
CD AB
CD

输出

-1

示例2

输入

5
QWER 666
QWER
1234
qwe
666
QWER

输出

1

备注:
时间复杂度O(n)O(n)O(n),额外空间复杂度O(1)O(1)O(1)

二、思路解析

这道题用到的是 “预处理” 的思想,本质上是暴力解法的一种优化。

通过两个变量 prev1 和 prev2,来记录输入元素中等于 str1 或 str2 的下标位置,并用后一个减去前一个即可知道题目所求的距离。

再把如上操作,放到数组中,重复一遍,即可求出最小值~

具体实现请看下面代码👇

三、完整代码

import java.util.Scanner;

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();

        int prev1 = -1;
        int prev2 = -1;
        int ret = 0x3f3f3f3f;
        String[] ch = new String[n];
        for(int i = 0; i < n; i++){
            ch[i] = in.next();
            if(ch[i].equals(str1)){
                if(prev2 != -1){
                    ret  = Math.min(ret, (i - prev2));
                }
                prev1 = i;
            }
            else if(ch[i].equals(str2)){
                if(prev1 != -1){
                    ret = Math.min(ret, i - prev1);
                }
                prev2 = i;
            }
        }

            System.out.println(ret == 0x3f3f3f3f ? -1 : ret);

    }
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

算法岗笔试题考点解析:KMP next数组与粒子群算法原理 在机器学习算法工程师的笔试准备中,数据结构与算法、机器学习基础始终是两大核心考察维度。KMP算法中的next数组计算、排序算法的复杂度对比、粒子群算法的迭代原理,都是高频出现的经典考点。理解这些知识背后的数学原理与工程价值,不仅有助于应对具体题目,更能帮助候选人建立系统化的算法思维。例如,KMP通过最长相等前后缀实现线性时间匹配,粒子群算法模拟鸟群觅食以求解优化问题,快速幂利用二进制分解降低计算复杂度。这些技术广泛应用于字符串处理、路径规划、模型训练等真实场景。本文从基础概念出发,结合经典算法与机器学习模型 阅读详情

相关推荐

字符串之数组中两个字符串的最小距离

题目: 给定一个字符串数组strs, 再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1和str2为null,或者不再strs中,都返回-1 列如: strs = {"1","3","3","2","3","1","3"} ,str1 = "1" str2 = "2" 返回2 strs = {"CD"},str1 = "CD",str2="AC"

码莎拉蒂 3318

【中等】数组中两个字符串的最小距离-Java:原问题

package live.every.day.ProgrammingDesign.CodingInterviewGuide.String; /** * 数组中两个字符串的最小距离 * * 【题目】 * 给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1与str2的最小距离,如果str1或str2为null,或 * 不在strs中,返回-1。 * * 【进阶题目】 * 如果查询发生的次数有很多,如何把每次查询的时间复杂度降为O(1)? * * 【难度

了解➔熟悉➔掌握➔精通 864

LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南

本文提供了一份详尽的LS-Dyna模态分析实战指南。文章系统讲解了如何利用LS-Dyna内置的隐式求解器进行特征值求解,从模型构建、几何清理、材料与连接设置,到核心的边界条件与隐式求解控制(如*CONTROL_IMPLICIT_EIGENVALUE),最后完成计算并解读频率与振型结果。旨在帮助工程师在熟悉的环境中高效完成结构振动特性分析,为后续动态响应分析奠定基础。

info6的博客 262

数组中两个字符串的最小距离

import java.util.HashMap; import java.util.Map.Entry; //数组中两个字符串的最小距离 public class MinDistance{ //获得两个字符串的最短距离 public static int GetMinDistance(String[]strs,String str1,String str2) {

ZCC的专栏 1011

PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)和中断(...

YGLeeeon的博客 3521

Win11上WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文详细介绍了在Win11系统上安装和配置WSL2及Ubuntu22.04开发环境的完整流程与避坑指南。内容涵盖从解决网络安装错误、更换国内镜像源以加速软件更新,到一站式配置C++开发工具链(包括GCC、GDB、CMake等),并提供了提升WSL2使用体验的实用技巧和故障排除方法,帮助开发者高效搭建稳定的Linux开发环境。

weixin_29306261的博客 474

字符串问题---数组中两个字符串的最小距离

【题目】  给定一个字符串数组strs,再给定两个字符串str1和str2,返回strs中str1与str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。【基本思路】  从左到右遍历strs,用变量last1记录最近一次出现的str1的位置,用变量last2记录最近一次出现str2的位置。如果遍历到str1,那么i - last2就是当前的str1和左边离它最近的str2

冰殇的博客 1187

【笔试刷题】笔记1

牛客网刷题的笔记

2301_80277275的博客 554

自然语言处理之机器翻译:Transformer:Transformer在低资源语言翻译中的应用

Transformer模型是自然语言处理领域的一个重要突破,由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN)的序列依赖性,采用自注意力机制(Self-Attention)处理输入序列,极大地提高了训练效率和模型性能。

zhubeibei168的博客 1014

基于工作流的低代码AI应用开发:Flock平台核心架构与实战指南

在AI应用开发领域,工作流编排正成为连接大语言模型(LLM)能力与复杂业务逻辑的关键技术。其核心原理是将任务分解为模块化节点,通过可视化方式定义执行顺序与数据流向,从而实现灵活可控的自动化流程。这种范式极大地提升了开发效率,降低了技术门槛,使得开发者能够聚焦于业务设计而非底层代码。在技术价值层面,工作流编排支持检索增强生成(RAG)、多智能体协作等高级模式,并能通过人工干预节点确保关键流程的可靠性与合规性。其典型应用场景包括智能客服、自动化办公、数据分析助手等。本文以Flock平台为例,深入解析了如何利用其

weixin_26848497的博客 381

【笔试训练2】牛牛的快递|最小花费爬楼梯|数组中两个字符串的最小距离

2.贪心,给两个变量prev1,prev2分别记录str1和str2出现时的下标,然后只需要遍历一次数组,每当遇到str1或者str2时都找一下prev1和prev2是否已经存在,如果存在,则更新。解题思路:float函数(向下取整),ceil函数(向上取整),这两个函数都是浮点数转化成整数时取证的不同情况。题目意思:这道题的意思就是在字符串数组strs中找出两个字符串str1和str2的最小距离,如果没有,则返回-1。1.状态表示:dp[i]:从起点开始,走到i位置时所需的最小花费为dp[i];

如果需要沟通,可添加微信公众号找我免费答疑 587

【DeepSeek-R1 】分词系统架构解析

DeepSeek-R1 分词系统解析 DeepSeek-R1 采用 SentencePiece Unigram 算法,通过统计语言模型实现高效子词分词。其核心优势包括: 算法对比:相比 BPE/WordPiece,Unigram 基于概率模型,支持多语言,自动回退字符级处理。 特性优化:智能空格处理、数字分桶、多语言统一支持,并采用前缀树索引和 SIMD 并行加速,编码速度达 12,458 tok/s。

赶紧的博客 429

数组中两个字符串的最小距离:从暴力到O(N)一次遍历与预处理优化

在算法面试与OJ刷题中,数组元素间的距离计算是一类高频基础题,其核心往往落在如何将暴力枚举的时间复杂度降为可接受的线性或对数级别。这类问题的本质是利用遍历过程中的状态记忆,用两个哨兵变量记录最近一次出现的索引,从而避免重复扫描全部组合。掌握这种“最近状态”优化技巧,不仅能解决字符串最小距离问题,还能迁移到最长无重复子串、股票买卖等经典场景,具备很高的技术复用价值。在华为OJ、牛客等平台的笔试中,输入数据规模常达到10^5量级,O(N^2)暴力必然超时,一次遍历O(N)方案则是性价比最高的解法;若涉及多次查询

weixin_28720573的博客 115

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

w0shishabi的博客 5685

Statistics and Machine Learning Toolbox

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

笔试——Day2

笔试强训第二天

m0_74317866的博客 412

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【笔试强训】Week1:点击消除,数组中两个字符串的最小距离,dd爱框框,腐烂的苹果,大数乘法

本文介绍了三种算法题解及IO优化方法。首先针对Java输入输出效率问题,提出了自定义快速读写类Read的方案,通过BufferedReader和StringTokenizer提升IO性能。然后分别解决三个算法问题:1) 使用StringBuilder模拟栈结构实现字符串相邻字符消除;2) 通过双指针动态规划求数组中两个字符串的最小距离;3) 采用滑动窗口算法寻找满足和值条件的最短连续子数组。这些解决方案通过优化数据结构和算法策略,有效提升了处理效率,特别适用于大规模数据场景。

记录了从0学习Java技术栈的日常 401

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

笔试强训:Day1

笔试精炼

weixin_51142926的博客 1555

编程笔试核心考点:字符串处理与算法优化实战

字符串处理和算法优化是编程面试的核心考察点,涉及数据结构应用与时间复杂度优化。栈结构在解决字符串消除问题时能达到O(n)最优复杂度,而双指针技术则能高效处理数组中的元素距离计算。这些基础算法在工程实践中具有广泛应用价值,如日志分析、网络故障检测等场景。通过滑动窗口与前缀和结合的技术,可以解决子数组求和问题;而多源BFS则适用于模拟传播类问题。高精度计算中的大数乘法更是金融等领域的刚需,通过Karatsuba算法可进一步优化性能。本文以'点击消除'和'腐烂的苹果'等经典题目为例,演示如何运用这些技术解决实际问

weixin_30582943的博客 279

字节跳动 2023/08/20【笔试真题】

字节跳动 2023/08/20【笔试真题】

小心星的博客 536

笔试强训题(1)

笔试训练题

m0_65558082的博客 819

【笔试强训】Day2

文章目录目录题目: 牛牛的快递描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)题目:最小花费爬楼梯描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)题目:数组中两个字符串的最小距离描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)兄弟们共勉 !!! 每篇前言原题链接:牛牛的快递_牛客题霸_牛客网牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付

2401_85548793的博客 695

笔试面试题精选

[经典面试题][去哪网]合并日期 - Yoona - 博客频道 - youkuaiyun.com [经典面试题][百度]c++实现STL中的string类 - Yoona - 博客频道 - youkuaiyun.com [经典面试题][百度]电话号码对应英语单词 - Yoona - 博客频道 - youkuaiyun.com [经典面试题]二叉树宽度 - Yoona - 博客频道 - youkuaiyun.com [经典面试题][腾讯]

SmartSi 3389

算法笔试高频题型解析:栈、滑动窗口与BFS实战

字符串处理与栈结构是算法设计的经典组合,通过维护后进先出的数据结构,可以高效解决相邻元素匹配问题。滑动窗口技术则通过动态调整子数组边界,将暴力解法的O(n²)复杂度优化至O(n),特别适合处理连续子数组求和类问题。在多源广度优先搜索(BFS)中,通过层级遍历策略能准确计算状态传播时间,广泛应用于网格类问题。这些核心算法在大厂技术面试中出现频率超过70%,其中栈应用题目在字节跳动笔试中出现率达45%,滑动窗口问题在美团面试题库中占比约30%。本文以字符串消除、最短子数组和多源BFS等实际考题为例,演示如何将基

weixin_30247781的博客 319

秋招C语言笔试题复盘:从指针到内存管理的核心考点拆解

C语言笔试是秋招技术岗的常见关卡,很多同学以为刷题量足够就能过关,但真正拉开差距的往往是对基础概念与底层原理的理解深度。从字符串处理、指针运算到内存分配与结构体内存对齐,这些高频考点不仅出现在选择题和填空题中,更贯穿于手写代码与程序改错等实战题型。理解sizeof与strlen的区别、野指针的产生根源、malloc与free的配对使用,以及冒泡排序与迪杰斯特拉算法的实现细节,是应对C方向笔试题的关键。掌握这些知识不仅能提升笔试通过率,也能为后续的音视频处理、后端开发等工程实践打下扎实基础。本文以爱奇艺秋招C

weixin_34252090的博客 373
上一篇: 「笔试刷题」:最小花费爬楼梯
下一篇: 「笔试刷题」:简写单词
爱敲代码的罗根
博客等级 码龄4年 1475粉丝 192原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的罗根

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值