LeetCode150道面试经典题--判断子序列(简单)

简介: 设置两个指针,一个T指针指向T并且遍历t,另一个有效位指针Sindex指向s初始位置,当数组中两者值相等时候S指针下移一位,当有效位指针一旦到达s字符串长度则返回true,否则返回false。如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。时间复杂度为O(n),空间复杂度为O(1)

 

1.题目

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

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

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

2.示例

image.gif编辑


3.思路

双指针:

设置两个指针,一个T指针指向T并且遍历t,另一个有效位指针Sindex指向s初始位置,当数组中两者值相等时候S指针下移一位,当有效位指针一旦到达s字符串长度则返回true,否则返回false

4.代码

LeetCode代码:

class Solution {
    public boolean isSubsequence(String s, String t) {
        int sIndex = 0;
        if(s.length() == 0){
            return true;
        }
        for (int i=0;i<t.length();i++){
            if (s.charAt(sIndex)==t.charAt(i)){
                sIndex++;
                if(sIndex == s.length()){
                    return true;
                }
            }
        }
        return false;
    }
}

image.gif

image.gif编辑

案例详细代码:

package LeetCode11;
public class javaDemo {
    public static void main(String[] args) {
        String s = "a";
        String t = "ahbgdc";
        boolean flag = false;
//        S字符串有效位指针
        int sIndex = 0;
//        判断是否为特殊情况即s若为空,则直接输出true
        if (s.equals("")){
            System.out.println(true);
        }else {
//            不是特殊情况则进行双指针判断
            for (int i=0;i<t.length();i++){
//                判断是否值相等
                if (s.charAt(sIndex)==t.charAt(i)){
                    sIndex++;
//                    如果sIndex遍历完,也就意味着存在子序列输出flag并即使跳出防止越界
                    if (sIndex == s.length()){
                        flag = true;
                        break;
                    }
                }
            }
        }
        System.out.println(flag);
    }
}

image.gif

时间复杂度为O(n),空间复杂度为O(1)

目录
相关文章
|
存储 算法 数据挖掘
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
存储
力扣-2904最短且字典序最小的美丽子序列
力扣-2904最短且字典序最小的美丽子序列
273 1
|
SQL 算法 大数据
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
|
算法 数据挖掘 大数据
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
|
算法 数据挖掘 大数据
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
|
算法 数据挖掘 Java
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
|
存储 算法 数据挖掘
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
296 0

热门文章

最新文章