- 给定一个字符串数组 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;
}
}
- 给定两个字符串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;
}