383. 赎金信

 

 

利用哈希映射的思路来处理,记录子串在父串中每个字符出现的位置

时间O(nk)(k与父串中相应字符出现离散度有关,最差情况下k=m,即父串的长度),空间O(h)(h为字串离散度,本题为26)

    public boolean canConstruct(String ransomNote, String magazine) {
        if (magazine.length()<ransomNote.length()) return false;
        // 本题的离散度只有小写字母26个
        int[] res = new int[26];
        for(char ch:ransomNote.toCharArray()){
            // 利用indexof,一来找出字符,二来找出下标,题目要求只能出现一次,所以后续的查找需要向后进行
            int index = magazine.indexOf(ch,res[ch-'a']);
            if(index==-1){
                return false;
            }
            // 记录字符ch下一次查找的开始位置,注意+1
            res[ch-'a']=index+1;
        }
        return true;
    }

 

posted @ 2021-04-23 10:38  jchen104  阅读(29)  评论(0编辑  收藏  举报