判断字符串子序列-华为OD

题目描述

给定字符串 target和 source, 判断 target 是否为 source 的子序列。 你可以认为 target 和 source 中仅包含英文小写字母。字符串 source可能会很长(长度 ~= 500,000),而 target 是个短字符串(长度 <=100)。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"abc"是"aebycd"的一个子序列,而"ayb"不是)。

请找出最后一个子序列的起始位置。

输入描述

第一行为target,短字符串(长度 <=100) 第二行为source,长字符串(长度 ~= 500,000)

输出描述

最后一个子序列的起始位置, 即最后一个子序列首字母的下标

示例
输入
abc
abcaybec
输出
3
说明:这里有两个abc的子序列满足,取下标较大的,故返回3
备注:若在source中找不到target,则输出-1
public static void main(String[] args) {
          
   
        String s1 = "abc";
        String s2 = "abcaybec";
        int m = s1.length() - 1;
        int n = s2.length() - 1;
        boolean flag = false;
        while (m >= 0 && n >= 0) {
          
   
            if (s1.charAt(m) == s2.charAt(n)) {
          
   
                if (m == 0) {
          
   
                    flag = true;
                    System.out.println(n);
                }
                m--;
            }
            n--;
        }
        if (!flag) {
          
   
            System.out.println(-1);
        }
    }
经验分享 程序员 微信小程序 职场和发展