Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情
题目描述
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。(出自力扣)
- 示例1
输入: s = "abc", t = "ahbgdc"
输出: true
- 示例2
输入: s = "axc", t = "ahbgdc"
输出: false
思路分析
- 据题意可知,第一个字符串
str1一定要比第二个字符串str2(身为子序列的字符串短于原本的字符串)。 - 我们可以声明两个变量
i和j,同时循环两个字符串,把i和j作为两个字符串的第一个下标;在循环的同时,可以将两个字符串里面的字母进行匹配对比,若是相同则i和j同时往右移,对比下一个字母,若是不同,则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))
总结
这是一个简单的运算,主要考察字符串的方法;复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。