国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

LeetCode - 383. Ransom Note

2019-11-08 18:24:08
字體:
來源:轉載
供稿:網友

題目:

Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; otherwise, it will return false.

Each letter in the magazine string can only be used once in your ransom note.

題目解析:

即判斷 ransomNote 是否可以通過magazine中的字母組成,其中 magazine 中的字母不考慮順序,即只要有這個字母就行。注意的是 magazine 中每個字母只能用一次。

思路與步驟:

兩種思路

    1. Comparing the character in ransomNote with the magazine directly. Obviously, nest loop has poor complexity. So I PRopose an easy-understand solution with Listwhich is faster than Map in sulution 2.

    2. Using a certain structure to store the count of every character. For example, usingarrayand Map. This solution is so interesting and clever. And I also learn some basis of java.

編程基礎:

1. 循環的簡介寫法,不需要數組下標 for (char c : str.toCharArray())

2. 數組下標  arr[c-'a']++;

3. Map 的學習

Java程序實現:

方法1:直接比較 —— List

public class Solution {    public boolean canConstruct(String ransomNote, String magazine) {        char[] rArray = ransomNote.toCharArray();        char[] mArray = magazine.toCharArray();        List<Character> rlist = new ArrayList<Character>();        for(int i = 0; i<magazine.length(); i++)    rlist.add(mArray[i]);        for(int i = 0; i<ransomNote.length(); i++){            if(rlist.contains(rArray[i]))   rlist.remove(rlist.indexOf(rArray[i]));            else    return false;        }        return true;    }}

方法2:

—— Array

public class Solution {    public boolean canConstruct(String ransomNote, String magazine) {        int[] arr = new int[26];        // method-1        for(char c: magazine.toCharArray())    arr[c-'a']++;        for(char c: ransomNote.toCharArray())   if(--arr[c-'a'] < 0) return false;                /* // method-2        for(int i = 0; i<magazine.length(); i++)    arr[magazine.charAt(i)-'a']++;        for(int i = 0; i<ransomNote.length(); i++)  if(--arr[ransomNote.charAt(i)-'a'] < 0) return false;        */                return true;    }}

—— Map

public class Solution {    public boolean canConstruct(String ransomNote, String magazine) {        // method-3        Map<Character, Integer> map = new HashMap<>();        for(char c: magazine.toCharArray()){            int count = map.containsKey(c) ? map.get(c)+1 : 1;            map.put(c, count);        }        for(char c: ransomNote.toCharArray()){            int newCount = map.containsKey(c) ? map.get(c)-1 : -1;            if(newCount == -1) return false;            map.put(c, newCount);        }        return true;    }}方法2 中method-1 最快,其次method-2,用Map 比List 還慢。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漠河县| 松阳县| 五河县| 太仆寺旗| 绥棱县| 卢氏县| 澜沧| 怀远县| 兴仁县| 准格尔旗| 达拉特旗| 莫力| 中宁县| 红原县| 阿坝县| 定远县| 辽阳市| 阿鲁科尔沁旗| 雅安市| 海原县| 平潭县| 韶山市| 营口市| 孙吴县| 松溪县| 绿春县| 丹巴县| 民权县| 麻栗坡县| 镇安县| 弋阳县| 方正县| 广平县| 沾化县| 西盟| 曲水县| 永胜县| 厦门市| 洪泽县| 牡丹江市| 铅山县|