【算法练习27】392. 判断子序列——双指针

352 阅读2分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

点赞再看,养成习惯。微信搜索【一条coding】关注这个在互联网摸爬滚打的程序员。

本文收录于github-技术专家修炼,里面有我的学习路线、系列文章、面试题库、自学资料、电子书等。


面对简单题,我重拳出击,架起意大利炮

——leetcode此题热评

前言

哈喽,大家好,我是一条。

糊涂算法,难得糊涂

Question

392. 判断子序列

难度:简单

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

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

示例 1:

输入:s = "abc", t = "ahbgdc"
输出:true

示例 2:

输入:s = "axc", t = "ahbgdc"
输出:false

Solution

看着是DP的标签,结果双指针就可以解决

  • 两个指针,对应两个字符串
  • 找到一个对应的+1
  • 当t已经走到末尾,s如果还没到,返回false

Code

所有leetcode代码已同步至github

欢迎star

/**
 * @author 一条coding
 */
class Solution {
    public boolean isSubsequence(String s, String t) {
        int n = s.length(), m = t.length();
        int i = 0, j = 0;
        while (i < n && j < m) {
            if (s.charAt(i) == t.charAt(j)) {
                i++;
            }
            j++;
        }
        return i == n;
    }
}

Result

复杂度分析

  • 时间复杂度:O(n)

Last

独脚难行,孤掌难鸣,一个人的力量终究是有限的,一个人的旅途也注定是孤独的。当你定好计划,怀着满腔热血准备出发的时候,一定要找个伙伴,和唐僧西天取经一样,师徒四人团结一心才能通过九九八十一难。 所以,

如果你也想进大厂,

想学好数据结构和算法,

想坚持刷题,

想有一群志同道合的伙伴,

请加入组队刷题