一個網(wǎng)站開發(fā)背景是什么semantic scholar
hello,大家好,我是星恒
今天給大家?guī)淼念}目是一道簡單題目,主要幫大家復(fù)習(xí)一下字符串和字符的相關(guān)操作
給你兩個字符串:ransomNote 和 magazine ,判斷 ransomNote 能不能由 magazine 里面的字符構(gòu)成。
如果可以,返回 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)勢在于看元素存在不,計數(shù)不是他的優(yōu)勢,這里數(shù)組是一種更優(yōu)的解法
我們只要把26個字母使用數(shù)字 0 - 25表示出來,然后使用數(shù)組給字符串出現(xiàn)的字母計數(shù),這樣我們遍歷第一個字符串magazine,存入字符串中字符出現(xiàn)次數(shù),然后遍歷ransomNote,減掉對應(yīng)字符出現(xiàn)的次數(shù),如果次數(shù)出現(xiàn)負(fù)數(shù),那么說明magazine的字符不能全部包含ransomNote里面的字符!
然后這里如果是算法新手,可能會在字符間相加減有一定的疑惑:加減后是否是ACSII整數(shù),還是還是字符?
這里其實會轉(zhuǎn)為整數(shù),字符和字符相加減,字符和整數(shù)相加減都會變?yōu)檎麛?shù)
整數(shù)轉(zhuǎn)字符只要強(qiáng)轉(zhuǎn)即可(按照ACSII碼規(guī)則轉(zhuǎn)的),即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ū)討論,也可以私信我,很樂意為大家效勞。
好啦,今天的每日一題到這里就結(jié)束了,如果大家覺得有用,可以可以給我一個小小的贊呢,我們下期再見!