一個網站開發(fā)背景是什么semantic scholar
hello,大家好,我是星恒
今天給大家?guī)淼念}目是一道簡單題目,主要幫大家復習一下字符串和字符的相關操作
給你兩個字符串:ransomNote 和 magazine ,判斷 ransomNote 能不能由 magazine 里面的字符構成。
如果可以,返回 true ;否則返回 false 。
magazine 中的每個字符只能在 ransomNote 中使用一次。
示例:
示例 1:
輸入:ransomNote = "a", magazine = "b"
輸出:false
示例 2:
輸入:ransomNote = "aa", magazine = "ab"
輸出:false
示例 3:
輸入:ransomNote = "aa", magazine = "aab"
輸出:true
提示:
- 1 <= ransomNote.length, magazine.length <= 105
- ransomNote 和 magazine 由小寫英文字母組成
分析:
這道題思路很簡單,剛開始大家一看到是否組成,一定先想到的是哈希,但是題目緊跟著說"每個字符只能使用一次",誒嘿,那我們肯定不適合用hash了,hash最大的優(yōu)勢在于看元素存在不,計數不是他的優(yōu)勢,這里數組是一種更優(yōu)的解法
我們只要把26個字母使用數字 0 - 25表示出來,然后使用數組給字符串出現(xiàn)的字母計數,這樣我們遍歷第一個字符串magazine,存入字符串中字符出現(xiàn)次數,然后遍歷ransomNote,減掉對應字符出現(xiàn)的次數,如果次數出現(xiàn)負數,那么說明magazine的字符不能全部包含ransomNote里面的字符!
然后這里如果是算法新手,可能會在字符間相加減有一定的疑惑:加減后是否是ACSII整數,還是還是字符?
這里其實會轉為整數,字符和字符相加減,字符和整數相加減都會變?yōu)檎麛?br />整數轉字符只要強轉即可(按照ACSII碼規(guī)則轉的),即char a =(char)('a'+x)
題解:
class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] count = new int[26];for (int i = 0; i < magazine.length(); i++) {count[magazine.charAt(i) - 'a']++;}for (int i = 0; i < ransomNote.length(); i++) {int index = ransomNote.charAt(i) - 'a';count[index]--;if (count[index] < 0) return false;}return true;}
}
如果大家有什么思考和問題,可以在評論區(qū)討論,也可以私信我,很樂意為大家效勞。
好啦,今天的每日一題到這里就結束了,如果大家覺得有用,可以可以給我一個小小的贊呢,我們下期再見!