LeetCode #383. Ransom Note

LeetCode #383. Ransom Note

題目:勒索信,如果信上的英文字母都能從雜誌上剪下則判斷為真,無法從雜誌剪下則判斷為否。

解題大意:將信件與雜誌的英文字母比對26個英文字母表,並記錄出現次數,信件字母出現次數小於或等於雜誌則判斷為真。

 

#1.將兩個string轉為Char[  ]。

#2.設兩個 int[ ] 存放字母出現次數 (alphabetMatch_a、alphabetMatch_b)。

#3.設大迴圈(26次、代表26個英文字母(char)(97)=a)。

#4.設兩個小迴圈做比對用(勒索信字母的長度、雜誌字母的長度)

#5.迴圈從A~Z比對勒索信與雜誌共出現哪幾個英文字母及出現幾次。

#6.如果勒索信相同的字母出現次數大於雜誌則判斷為假。

 

public class Solution {
    public bool CanConstruct(string ransomNote, string magazine) {
            if (ransomNote.Length > magazine.Length)//如果信件字數比雜誌字數還多則直接打掉(false)
            {
                return false;
            }
            else
            {
                char[] charRansomNote = ransomNote.ToCharArray();
                char[] charMagazine = magazine.ToCharArray();
                int[] alphabetMatch_a = new int[26];// 代表英文的26個字母
                int[] alphabetMatch_b = new int[26];// 代表英文的26個字母

                for (int i = 0; i < alphabetMatch_a.Length; i++)
                {
                    for (int Match_a = 0; Match_a < ransomNote.Length; Match_a++)
                    {
                        if (charRansomNote[Match_a] == (char)(97 + i))//(char)(97 + i)為a~z
                        {
                            alphabetMatch_a[i]++;
                        }
                    }
                    for (int Match_b = 0; Match_b < magazine.Length; Match_b++)
                    {
                        if (charMagazine[Match_b] == (char)(97 + i))
                        {
                            alphabetMatch_b[i]++;
                        }
                    }
                }
                for (int i = 0; i < alphabetMatch_a.Length; i++)
                {
                    if (alphabetMatch_a[i] > alphabetMatch_b[i])
                    {
                        return false;
                    }
                }
            }
            return true;
        }
}

本頁面為一點點累積學習寫程式之路。

許多資訊不是正確、或只是自己看的懂得。

如果不小心點進來誤導了您,還真的不好意思。