zoukankan      html  css  js  c++  java
  • 392. 判断子序列

    题目

    392. 判断子序列

    我的思路

    两个指针,遍历即可。

    我的实现

    class Solution {
    public:
        bool isSubsequence(string s, string t) {
            int pos_s=0;
            int pos_t=0;
            for(;pos_s<s.size()&&pos_t<t.size();pos_t++){
                if(s[pos_s]==t[pos_t])pos_s++;
            }
            if(pos_s==s.size())return true;
            else return false;
        }
    };
    //一个简单的想法:s和t各设置一个指针,最初指向两个字符串的首字符,若匹配则同时滑动,若不匹配则滑动t的指针。直到再次匹配或者到指针末尾

    时间复杂度:m+n

    空间复杂度:1

    拓展学习

    后续挑战

    如果出现待匹配串特别多,T特别长,多次用上面的方法会非常耗时(因为T太长了,遍历一次开销大)。

    所以对T做预处理,建立一个26(字符种类数)*m的辅助数组,其中存储下一个对应字符在T中出现的位置。借助这个辅助数组匹配依次的开销就是待匹配串的长度,相对来说小很多。

    class Solution {
    public:
        bool isSubsequence(string s, string t) {
            int n = s.size(), m = t.size();
    
            vector<vector<int> > f(m + 1, vector<int>(26, 0));
            for (int i = 0; i < 26; i++) {
                f[m][i] = m;
            }
    
            for (int i = m - 1; i >= 0; i--) {
                for (int j = 0; j < 26; j++) {
                    if (t[i] == j + 'a')
                        f[i][j] = i;
                    else
                        f[i][j] = f[i + 1][j];
                }
            }
            int add = 0;
            for (int i = 0; i < n; i++) {
                if (f[add][s[i] - 'a'] == m) {
                    return false;
                }
                add = f[add][s[i] - 'a'] + 1;
            }
            return true;
        }
    };
    
    作者:LeetCode-Solution
    链接:https://leetcode-cn.com/problems/is-subsequence/solution/pan-duan-zi-xu-lie-by-leetcode-solution/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    数据结构-串(模式匹配复习)

    见drive上的笔记。KMP算法,next数组的生成方法!

  • 相关阅读:
    查看表中bytea类型的字段内容
    Js中生成32位随机id
    VS Code操作指南
    记录一次非常简单的Win10安装
    Typora中下载并安装主题
    Win 10下隐藏任务栏图标B & O Play Audio Control
    IDEA基本使用
    Eclipse中安装反编译器(中文版)
    Eclipse设置控制台不自动弹出
    解决Eclipse控制台中文乱码的情况
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13392255.html
Copyright © 2011-2022 走看看