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

    要使字符串s的排序要和字符串t的排序一致,我们只需考虑两个要素

    • 当字符'a'出现,判断字符传t中是否存在字符'a'
    • t中字符‘a'之后的剩余字符串是否存在’b'

    用一句通俗的话就是剩余字符串中是否存在下一个字符;利用贪心算法的概念就是局部是否存在最优解。剩余字符串是否存在字符。

    注意区分几个字符方面的函数:charAt以及indexOf

    方法一:不使用库函数,直接一个一个遍历比较

    class Solution {
        public boolean isSubsequence(String s, String t) {
            int i=0;
            for(char ch:s.toCharArray() ){
                while(i<t.length()&&t.charAt(i)!=ch) i++;
                i++;//如果找到了相应的字符也要继续往后
            }
            //这里i为什么会是=呢?因为有可能到字符的最后一个的时候i=t.length()-1,但是后面有一个i++;所以这个时候要为<=
            return i<=t.length()?true:false;
        }
    }

    方法二:使用库函数,进一步简化,但思想仍然为一个一个比较是否存在

    class Solution {
        public boolean isSubsequence(String s, String t) {
            // int i=0;
            // for(char ch:s.toCharArray() ){
            //     while(i<t.length()&&t.charAt(i)!=ch) i++;
            //     i++;//如果找到了相应的字符也要继续往后
            // }
            // //这里i为什么会是=呢?因为有可能到字符的最后一个的时候i=t.length()-1,但是后面有一个i++;所以这个时候要为<=
            // return i<=t.length()?true:false;
            int j=-1;
            for(char ch:s.toCharArray() ){
                //确定从当前的位置继续往后进行寻找
                j=t.indexOf(ch,j+1);
                //如果找不到说明非子串
                if(j==-1) return false;
            }
            return true;
        }
    }
  • 相关阅读:
    linux基础
    hadoop部署
    django.db.utils.OperationalError: cannot ALTER TABLE "servers_ecs" because it has pending trigger events
    理解go的闭包
    go time模块
    Android 安全性和权限
    Android permission
    AndroidManifest.xml--android系统权限定义
    关于Android4.x系统默认显示方向各种修改
    跨域解决方案
  • 原文地址:https://www.cnblogs.com/sjh-dora/p/12884551.html
Copyright © 2011-2022 走看看