這是悅樂書的第313次更新,第334篇原創
01 看題和準備
今天介紹的是LeetCode算法題中Easy級別的第182題(順位題號是771)。字符串J代表珠寶,S代表你擁有的石頭。S中的每個字符都是你擁有的一種石頭。計算S中有多少石頭也是珠寶。J中的字符不會重復出現,J和S中的所有字符都是英文字母。字母區分大小寫,因此“a”被認為是與“A”不同類型的石頭。例如:
輸入:J =“aA”,S =“aAAbbbb”
輸出:3
輸入:J =“z”,S =“ZZ”
輸出:0
注意:
S和J將由字母組成,長度最多為50。
J中的字符不會重復出現。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
題目的意思是計算出J中的每個字符,在S中出現的次數之和。因為J中的字符不會有重復值,所以可以直接計算,不用擔心計算失真。因為是英文字母,所以可以直接使用整型數組,以S中每個字符代表的ASCII值來作為索引,出現次數為值,然后遍歷該數組,再以J的每個字符作為索引,累加對應的元素值即可。
public int numJewelsInStones(String J, String S) {int[] arr = new int[128];for (char ch : S.toCharArray()) {arr[ch]++; }int count = 0;for (char ch : J.toCharArray()) {count += arr[ch]; }return count;
}
03 第二種解法
也可以只使用一個循環來解決,借助字符串的indexOf方法,每次獲取S中的一個字符,來判斷是否存在于J中,存在就次數加1。
public int numJewelsInStones(String J, String S) {int count = 0;for (int i=0; i<S.length(); i++) {if (J.indexOf(S.charAt(i)) > -1) {count++;}}return count;
}
04 小結
算法專題目前已日更超過五個月,算法題文章182+篇,公眾號對話框回復【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!