Day40 Map01

  1. 给定一个字符串数组 words 和一个字符串 chars. 如果一个字符串能被 chars 里面的字符组成,那么这个字符串就是"好"的(chars里面每个字符只能使用一次)。 求:words 里面所有好的字符串的字符总个数。
    比如:
    words = [“cat”, “bt”, “hat”, “tree”]
    chars = “atach”
    好的字符串有 “cat”, “hat”,
    3 + 3 = 6. 输出:6
package week7.day40;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author : 魏铭志
 * @date :  2020/4/17 18:56
 */
public class Test2 {
    public static void main(String[] args) {
        String[] words = {"cat", "bt", "hat", "tree"};
        String chars = "atach";

        int length = 0;
        for (String word : words) {
            if (isGoodString(conversionString(word), conversionString(chars))) {
                length += word.length();
            }
        }
        System.out.println(length);

    }

    public static boolean isGoodString(Map<Character, Integer> word, Map<Character, Integer> chars) {
        Set<Map.Entry<Character, Integer>> entries = word.entrySet();
        for (Map.Entry<Character, Integer> entry : entries) {
            char ch = entry.getKey();
            if (chars.get(ch) == null || entry.getValue() > chars.get(ch)) {
                return false;
            }
        }
        return true;
    }

    public static Map<Character, Integer> conversionString(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            map.put(ch, map.get(ch) == null ? 1 : map.get(ch)+1);
        }

        return map;
    }
}

  1. 给定两个字符串s和t, 它们只包含小写字母。字符串t是由s中的字母随机打乱之后,在随机的一个位置添加一个字母生成的。请找出那个添加的字母。
    比如:
    s = “abcd” t = “baedc”
    输出:e

给两种解题过程:
第一种

package week7.day40;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 输出:e
 * @author : 魏铭志
 * @date :  2020/4/17 19:18
 */
public class Test3 {

    public static void main(String[] args) {
        System.out.println(findLetter(conversionString("abcd"),conversionString("baedc")));
    }

    public static Map<Character, Integer> conversionString(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            map.put(ch, map.get(ch) == null ? 1 : map.get(ch)+1);
        }

        return map;
    }

    public static char findLetter(Map<Character, Integer> map1, Map<Character, Integer> map2) {
        Map<Character, Integer> oldMap = map1.size() < map2.size() ? map1 : map2;
        Map<Character, Integer> newMap = map1.size() < map2.size() ? map2 : map1;
        Set<Map.Entry<Character, Integer>> entries = newMap.entrySet();
        for (Map.Entry<Character, Integer> entry : entries) {
            char ch = entry.getKey();
            if (oldMap.get(ch) == null || newMap.get(ch) > oldMap.get(ch)) {
                return ch;
            }
        }

        return ' ';
    }
}

第二种:

    public char findTheDifference(String s, String t) {
        int xor = 0;
        for(int i = 0; i < s.length(); i++) {
            xor = xor ^ s.charAt(i);
        }
        for(int i = 0; i < t.length(); i++) {
            xor = xor ^ t.charAt(i);
        }
        return (char) xor;
    }
发布了27 篇原创文章 · 获赞 11 · 访问量 2327

猜你喜欢

转载自blog.csdn.net/qq_43587378/article/details/105587458