双指针法判断子序列(LeetCode 392)

判断子序列

子序列是在字符串或者数组中,删除一些元素(也可以不删除)而不改变剩余元素的顺序的相对位置而形成的新数组或字符串

(例如,"ace""abcde"的一个子序列,而"aec"不是)。

题目描述(力扣392题)

判断子序列

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

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

示例1:

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

示例2:

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

提示:

0 <= s.length <= 100
0 <= t.length <= 10^4
两个字符串都只由小写字符组成。

方法 —— 双指针

定义两个指针ij分别指向st字符串的首字符

开始循环遍历要判断的子序列s字符串

  • s[i] == t[j]时,代表匹配成功,此时同时对ij加一
  • s[i] != t[j]时,匹配失败,此时仅对j指向源字符串的指针加一

i超出字符串s范围时,说明st的子序列

如果在遍历过程中,j超出字符串t的范围,则说明s不是t的子序列

代码:

class Solution {
public:
    bool isSubsequence(string s, string t) {
        // 双指针
        int i = 0, j = 0;
        while(i < s.size()){
            if(j >= t.size()) return false;
            if(s[i] == t[j])
                i++, j++;
            else
                j++;
        }
        return true;
    }
};
posted @ 2025-04-28 11:24  风陵南  阅读(24)  评论(0)    收藏  举报