文章目录
1. 题目
2. 思路
(1) HashMap
- 将每个字母及其对应的序号存入HashMap中,遍历字符串时,首先确定第一个字符的序号,若之后存在其他字符的序号不等于第一个字符的序号,则排除这个字符串,否则将其加入结果集。
(2) 哈希表优化
- 利用一个长度为26的字符串代替HashMap,字符下标即为字母在字母表中的位置,字符即为字母对应的序号。
3. 代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public String[] findWords(String[] words) {
Map<Character, Integer> map = new HashMap<Character, Integer>() {{
put('q', 1);
put('w', 1);
put('e', 1);
put('r', 1);
put('t', 1);
put('y', 1);
put('u', 1);
put('i', 1);
put('o', 1);
put('p', 1);
put('a', 2);
put('s', 2);
put('d', 2);
put('f', 2);
put('g', 2);
put('h', 2);
put('j', 2);
put('k', 2);
put('l', 2);
put('z', 3);
put('x', 3);
put('c', 3);
put('v', 3);
put('b', 3);
put('n', 3);
put('m', 3);
}};
List<String> res = new ArrayList<>();
for (String word : words) {
int num = map.get(Character.toLowerCase(word.charAt(0)));
int index = 1;
while (index < word.length()) {
if (map.get(Character.toLowerCase(word.charAt(index))) != num) {
break;
}
index++;
}
if (index == word.length()) {
res.add(word);
}
}
return res.toArray(new String[0]);
}
}
class Solution1 {
public String[] findWords(String[] words) {
String charNum = "23321222122233111121131313";
List<String> res = new ArrayList<>();
for (String word : words) {
char num = charNum.charAt(Character.toLowerCase(word.charAt(0)) - 'a');
int index = 1;
while (index < word.length()) {
if (charNum.charAt(Character.toLowerCase(word.charAt(index)) - 'a') != num) {
break;
}
index++;
}
if (index == word.length()) {
res.add(word);
}
}
return res.toArray(new String[0]);
}
}