Fork me on GitHub

LeetCode之383. Ransom Note

--------------------------------------------

 

思路就是进行频率统计。

 

统计一下第二个字符串字符出现次数++
统计一下第一个字符串中字符出现次数--
如果出现负数说明第二个中的字符不够用的。

 

AC代码如下:

public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int book[]=new int[26];
        for(int i=0;i<magazine.length();i++) book[magazine.charAt(i)-'a']++;
        for(int i=0;i<ransomNote.length();i++) book[ransomNote.charAt(i)-'a']--;
        for(int i=0;i<book.length;i++) if(book[i]<0) return false;
        return true;
    }
}

改进的AC代码(节省了一个for循环):

public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int book[]=new int[26];
        for(int i=0;i<magazine.length();i++) book[magazine.charAt(i)-'a']++;
        for(int i=0;i<ransomNote.length();i++) if(--book[ransomNote.charAt(i)-'a']<0) return false;
        return true;
    }
}

 

或者:

统计一下第一个的字符出现次数++;
统计一下第二个字符出现次数--
如果出现正数说明第一个没减完呗

 

AC代码:

public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int book[]=new int[26];
        for(int i=0;i<ransomNote.length();i++) book[ransomNote.charAt(i)-'a']++;
        for(int i=0;i<magazine.length();i++) book[magazine.charAt(i)-'a']--;
        for(int i=0;i<book.length;i++) if(book[i]>0) return false;
        return true;
    }
}

 

题目来源: https://leetcode.com/problems/ransom-note/

posted @ 2016-10-25 19:35  CC11001100  阅读(189)  评论(0编辑  收藏  举报