【LeetCode】392.判断子序列

文章目录

【题目链接】

392.判断子序列

【题目描述】

【解题思路】

本题采用 双指针法 是最优解,核心思路是通过两个指针分别遍历 s 和 t,逐步匹配 s 中的字符,利用 "子序列只需保持相对顺序" 的特性,高效判断匹配结果。

具体逻辑如下:

  • 初始化指针:定义两个指针 i 和 j,分别指向 s 的起始位置(i=0)和 t 的起始位置(j=0)。
    双指针遍历:
  • 同时遍历两个字符串,只要 i 未遍历完 s(i < s.size())且 j 未遍历完 t(j < t.size()),就持续循环。
  • 若当前 s[i] 与 t[j] 相等,说明匹配成功,将 i 向后移动一位(继续匹配 s 的下一个字符)。
    无论是否匹配成功,j 都需向后移动一位(继续遍历 t 的下一个字符,寻找可能匹配的字符)。
  • 判断结果:遍历结束后,若 i 等于 s 的长度(i == s.size()),说明 s 中所有字符都在 t 中按顺序匹配成功,返回 true;否则返回 false。

C++ 实现:

cpp 复制代码
class Solution {
public:
    bool isSubsequence(string s, string t) {
        int n = s.size();
        int m = t.size();

        int i=0; 
        int j=0;

        while(i<n && j<m){
            if (s[i] == t[j]){
                i++;
            }
            j++;
        }

        return i==n;
    }
};

Python实现:

python 复制代码
class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        
        m = len(s)
        n = len(t)

        i = 0
        j = 0 

        while i<m and j<n:
            if s[i] == t[j]:
                i+=1

            j+=1

        return i==m 

时间复杂度:

  • 算法的时间复杂度描述的是最坏情况下的执行效率。对于本题:
  • 最坏情况是 s 不是 t 的子序列,且需要遍历完整个 t 才能确认(如上述例子),此时操作次数为 m。
    因此,时间复杂度由 t 的长度 m 主导,即 O (m),而非由 s 的长度 n 主导的 O (n)。

空间复杂度: O(1)

相关推荐
yaoh.wang5 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
T1ssy6 小时前
布隆过滤器:用概率换空间的奇妙数据结构
算法·哈希算法
hetao17338376 小时前
2025-12-12~14 hetao1733837的刷题笔记
数据结构·c++·笔记·算法
鲨莎分不晴7 小时前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习
搞科研的小刘选手8 小时前
【ISSN/ISBN双刊号】第三届电力电子与人工智能国际学术会议(PEAI 2026)
图像处理·人工智能·算法·电力电子·学术会议
拉姆哥的小屋8 小时前
从混沌到秩序:条件扩散模型在图像转换中的哲学与技术革命
人工智能·算法·机器学习
Sammyyyyy8 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay
sin_hielo9 小时前
leetcode 2110
数据结构·算法·leetcode
Jay20021119 小时前
【机器学习】33 强化学习 - 连续状态空间(DQN算法)
人工智能·算法·机器学习
铭哥的编程日记9 小时前
后端面试通关笔记:从真题到思路(五)
面试·职场和发展