首页 > 编程语言 >算法题-字符串序列判断

算法题-字符串序列判断

时间:2024-07-10 17:55:06浏览次数:13  
标签:ps 字符 int 序列 算法 字符串 pl

题目描述:

        输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。判定S是否是L的有效字串。
        判定规则:S中的每个字符在L中都能找到(可以不连续),且S在L中字符的前后顺序与S中顺序要保持一致。(例如,S="ace"是L="abcde"的一个子序列且有效字符是a、c、e,而"aec"不是有效子序列,且有效字符只有a、e)
输入描述:
        输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。先输入S,再输入L,每个字符串占一行。
输出描述:
        S串最后一个有效字符在L中的位置。(首位从0开始计算,无有效字符返回-1)
补充说明:
示例1
输入:ace
abcde
输出:4
说明:
示例2
输入:fgh
abcde
输出:-1

 解析思路:

        由题目可知,这是在考察字符串子序列问题,同时,也不要求子序列是连续的,所以,我们只需要建立两个索引分别指向各自字符串,一旦子序列字符匹配上,则指向下一个字符,直至结束位置,然后返回最后字符的位置即可。

 实现代码:

public class HuaWeiOD {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println(test1(in))
    }

    public static int test1(Scanner in) {
        // 输入两条字符串
        String S = in.nextLine();
        String L = in.nextLine();
        // 当不需要输入,则关闭Scanner
        in.close();
        // 初始化无效值
        int lastIdx = -1;
        // 分别获取字符串长度
        int sLength = S.length();
        int lLength = L.length();
        // 判定条件 S字符串要比L字符串短
        if (sLength > lLength) {
            return -1;
        }
        // 初始化两个索引值
        int ps = 0, pl = 0;
        // 将字符串转成数组
        char[] sArrays = S.toCharArray();
        char[] lArrays = L.toCharArray();
        // 当两个索引位置小于各自的长度,则还在匹配子序列
        while (ps < sLength && pl < lLength) {
            // 当对应位置的字符相同,则两个字符串的位置指向下一个,当不相同时,长字符串索引指向下一个
            if (sArrays[ps] == lArrays[pl]) {
                ps += 1;
                pl += 1;
            } else {
                pl += 1;
            }
        }
        // 当S字符串索引位置到达最后一个,L字符串索引位置小于等于最后一个,则表明已匹配完成,返回最后的的位置
        if (ps == sLength && pl <= lLength) {
            return pl - 1;
        }
        // 否则,返回-1无效值
        return lastIdx;
    }

标签:ps,字符,int,序列,算法,字符串,pl
From: https://blog.csdn.net/weixin_45901350/article/details/140330088

相关文章

  • 【NOI】C++算法设计入门之贪心
    文章目录前言一、概念1.导入2.概念2.1贪心算法的核心思想2.2贪心算法的步骤2.3贪心算法的应用场景二、例题讲解问题:1372.活动选择问题:1456.淘淘捡西瓜问题:1551-任务调度问题:1561.买木头三、总结五、感谢前言贪心算法,如同成语"得陇望蜀"所描述的那样,总是......
  • PCA(主成分分析)--降维的基础算法
    一.原理简介PCA主成分分析,是一种使用较为广泛的数据降维算法,主要思想是将n维数据特征映射到k维上,这k维全新的正交数据特征称为主成分;PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据......
  • 【打卡】006 P6 VGG-16算法-Pytorch实现人脸识别
    >-**......
  • 基于单层LSTM模型的文本序列预测:从预处理到字符预测的完整流程
    数据集我的数据集就是重复的两句话,重复了几百次。引言在自然语言处理(NLP)领域,序列预测是一个非常重要的任务,它涉及到根据已有的文本序列来预测接下来的内容。近年来,循环神经网络(RNN)及其变体,如长短时记忆网络(LSTM),因其能够有效处理序列数据中的长期依赖关系而广受青睐。本博客......
  • JavaScript如何将字符串形式里的img图片添加属性
    方法一:使用正则表达式以下例子中将会在img图片中添加crossorigin属性lethtml=`<p>打撒抠脚大汉噶刷卡机很大凯撒</p><p>规范化是的冯绍峰东风浩荡试试</p><imgsrc="http://s3.v.360xkw.com/yzb/photos/1688536327316_ca0e2e3d.jpg"alt=""......
  • 【C语言学习】3.字符串+转义字符+注释
    字符串由双引号引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。注:字符串以\0为结束标志,不算作字符串内容,若未输入,编译器将隐藏添加\0。\0为字符串的结束标志的证明:法一:chararr1[]="abc";//双引号为字符串chararr2[]={'a','b','c'};//单引号......
  • 代码随想录算法训练营第五天 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数
    代码随想录算法训练营第五天|242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和最近有点忙,哈希表章节的博客可能没有以前那么多图和那么详细了。不过忙完这段时间我可能会回来补的。有效字母异位词题目链接/文章讲解/视频讲解:https://programmercar......
  • 如何在 Rust 中安全地处理 Openresty中的字符串?
    HelloWorldRust以简洁高效安全而闻名,那么我们怎么集成到C的项目中呢。尤其是字符串数据结构,该如何正确地交互。借此机会整理一下工作中遇到的难题,希望可以帮助大家走出坑。我们先回顾一下C中字符串的结构。在C语言中,字符是一个连续的内存地址空间以\0结尾。C语言的......
  • 代码随想录算法训练营第8天 | 复习字符串API、双指针
    2024年7月10日题344.翻转字符数组记得用双指针,时间复杂度最低。题541.反转字符串II首先自己实现一个String的reverse函数方便后面用,记得字符数组和字符串的互转方式。然后计算有多少组2k,分组处理即可。classSolution{publicStringreverseStr(Strings,intk){......
  • 优化问题和采样问题同样都是爬山,那么两者的算法是不是互通的?
    优化问题和采样问题在某些方面确实存在相似性,但它们的算法并不完全互通,而是各有其独特的特性和应用场景。优化问题是在给定约束条件下,寻找一个目标函数的最优解(最大值或最小值)的过程。这类问题在运筹学、工程、经济学、物流、能源、金融等许多领域都有广泛应用。优化算法的目......