LeetCode随缘刷题之赎金信

欢迎评论区讨论。😃

package leetcode.day_12_04;


/**
 * 为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。
 *
 * 给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。
 *
 * 如果可以构成,返回 true ;否则返回 false 。
 *
 * magazine 中的每个字符只能在 ransomNote 中使用一次。
 *
 * 示例 1:
 *
 * 输入:ransomNote = "a", magazine = "b"
 * 输出:false
 * 示例 2:
 *
 * 输入:ransomNote = "aa", magazine = "ab"
 * 输出:false
 * 示例 3:
 *
 * 输入:ransomNote = "aa", magazine = "aab"
 * 输出:true
 *
 * @author soberw
 */
public class CanConstruct383 {
    public boolean canConstruct(String b, String a) {
        //记录次数
        int count = 0;
        //转化为StringBuilder,方便操作
        StringBuilder aa = new StringBuilder(a);
        //拆分为char数组,方便筛选
        char[] newB = b.toCharArray();
        //记下标
        int index = 0;
        for (char bb : newB) {
            //寻找下标
            index = aa.indexOf(String.valueOf(bb));
            //说明找到了,删除对应的字符,防止出现子包含情况
            if (index>=0) {
                count++;
                aa.deleteCharAt(index);
            }
        }
        //相等说明全部包含在内
        if (count == b.length()) {
            return true;
        }

        return false;
    }
    public static void main(String[] args) {
        System.out.println(new CanConstruct383().canConstruct("aa","ab"));
    }
}


在这里插入图片描述

posted @ 2022-02-09 19:45  soberw-  阅读(31)  评论(0)    收藏  举报