题目一:884. 两句话中的不常见单词
解法一:HashMap记录,StringBuilder转字符串数组
public String[] uncommonFromSentences2(String s1, String s2) {
String[] split1 = s1.split(" ");
String[] split2 = s2.split(" ");
Map<String,Integer> map = new HashMap<>();
for (int i=0;i<split1.length;i++){
map.put(split1[i],map.getOrDefault(split1[i],0)+1);
}
for (int i=0;i<split2.length;i++){
map.put(split2[i],map.getOrDefault(split2[i],0)+1);
}
StringBuilder sb = new StringBuilder();
for (String s : map.keySet()) {
if (map.get(s)==1){
sb.append(s+"-");
}
}
String s3 = sb.toString();
if (s3.equals("")){
return new String[]{};
}
s3 = s3.substring(0, s3.length() - 1);
return s3.split("-");
}
解法一:HashMap记录,ArrayList接收后转字符串数组
public String[] uncommonFromSentences(String s1, String s2) {
Map<String,Integer> map = new HashMap<>();
String[] split1 = s1.split(" ");
String[] split2 = s2.split(" ");
for (int i=0;i<split1.length;i++){
map.put(split1[i],map.getOrDefault(split1[i],0)+1);
}
for (int i=0;i<split2.length;i++){
map.put(split2[i],map.getOrDefault(split2[i],0)+1);
}
List<String> list = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue()==1){
list.add(entry.getKey());
}
}
return list.toArray(new String[0]);
}
题目二:804. 唯一摩尔斯密码词
解法一:两个解法差距不大一个是直接把密码设置为常量,一个是跟在方法里面
public static final String [] strArr =
{".-","-...","-.-.","-..", ".","..-.","--.","....", "..",".---","-.-",".-..", "--","-.","---",".--.", "--.-",".-.","...","-", "..-","...-",".--", "-..-","-.--","--.."};
public int uniqueMorseRepresentations(String[] words) {
Set<String> set = new HashSet<>();
for (String word : words) {
StringBuilder sb = new StringBuilder();
for (int i=0;i<word.length();i++){
char c = word.charAt(i);
sb.append(strArr[c-'a']);
}
set.add(sb.toString());
}
return set.size();
}
解法二:每次调用都New一个Map
public int uniqueMorseRepresentations2(String[] words) {
Map<Character,String> map = new HashMap<>();
map.put('a',".-");map.put('b',"-...");map.put('c',"-.-.");map.put('d',"-..");map.put('e',".");map.put('f',"..-.");map.put('g',"--.");map.put('h',"....");map.put('i',"..");map.put('j',".---");map.put('k',"-.-");map.put('l',".-..");
map.put('m',"--");map.put('n',"-.");map.put('o',"---");map.put('p',".--.");map.put('q',"--.-");map.put('r',".-.");map.put('s',"...");map.put('t',"-");
map.put('u',"..-");map.put('v',"...-");map.put('w',".--");map.put('x',"-..-");map.put('y',"-.--");map.put('z',"--..");
List<String> list = new ArrayList<>();
for (String word : words) {
char[] chars = word.toCharArray();
StringBuilder sb = new StringBuilder();
for (char aChar : chars) {
sb.append(map.get(aChar));
}
if (!list.contains(sb.toString())) list.add(sb.toString());
}
return list.size();
}
题目三:482. 密钥格式化
解法:拆掉字符串,除了-,其他的判断是否大写字母之后不是就转一下,
public String licenseKeyFormatting(String s, int k) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (c=='-') {
continue;
}
sb.append((c>='a' && c <='z')?(char)(c-32):c);
}
int len = sb.length() - k;
while (len > 0){
sb.insert(len,'-');
len -= k;
}
return sb.toString();
}
题目四:409. 最长回文串
解法
public int longestPalindrome(String s) {
Map<Character,Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
map.put(c,map.getOrDefault(c,0)+1);
}
int res = 0, odd = 0;
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
int count = entry.getValue();
int rem = count % 2;
res += count - rem;
if (rem == 1) odd = 1;
}
return res + odd;
}