LeetCode—— Ransom Note

100 阅读1分钟

题目描述

思路

本人在解决这道题目时,算法的复杂度为o(n^2),速度非常慢

在参考了别人的答案后,发现可实现o(n),真是感慨啊!

思路大致是这样的

1、将字符串的所有字母都遍历一遍,并把magazine的值的数量存到一个长度为26的int数组中

2、再遍历ransom,每遇到一个字母,就将int数组中对应的字母的数量减1,如果减后数量小于0,则应该返回false

代码实现

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] alphabet = new int[26];
        for(int i = 0; i < magazine.length(); i++){
            alphabet[magazine.charAt(i) - 'a']++;
        }
        
        for(int j = 0; j < ransomNote.length(); j++){
            if(--alphabet[ransomNote.charAt(j) - 'a'] < 0)
                return false;
            
        }
        return true;
    }       
}