本人在解決這道題目時,算法的複雜度爲,速度很是慢java
在參考了別人的答案後,發現可實現,真是感慨啊!算法
思路大體是這樣的數組
一、將字符串的全部字母都遍歷一遍,並把magazine的值的數量存到一個長度爲26的int數組中spa
二、再遍歷ransom,每遇到一個字母,就將int數組中對應的字母的數量減1,若是減後數量小於0,則應該返回falsecode
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;
}
}
複製代碼