判断子序列

182 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。(出自力扣)

  • 示例1
输入: s = "abc", t = "ahbgdc"
输出: true
  • 示例2
输入: s = "axc", t = "ahbgdc"
输出: false

思路分析

  • 据题意可知,第一个字符串str1一定要比第二个字符串str2(身为子序列的字符串短于原本的字符串)。
  • 我们可以声明两个变量ij,同时循环两个字符串,把ij作为两个字符串的第一个下标;在循环的同时,可以将两个字符串里面的字母进行匹配对比,若是相同则ij同时往右移,对比下一个字母,若是不同,则i不变,而j往右移动一步再进行对比,若是遍历结束了i移动到字符串的最后面,就说明str1是str2的子序列。

AC代码

let a = 'af';
let b = 'sfafa'
function common(str1, str2){
    let length1 = str1.length;
    let length2 = str2.length;
    let i = 0;
    let j = 0;
    while(i<length1 && j<length2) {
        if(str1.charAt(i) == str2.charAt(j)) {
            i++
        }
        j++
    }
    return i == length1;
}
console.log(common(a, b))

总结

这是一个简单的运算,主要考察字符串的方法;复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。