找出数组内最长的string
Given a dictionary, find all of the longest words in the dictionary.
Example
Given
{
"dog",
"google",
"facebook",
"internationalization",
"blabla"
}
the longest words are(is) ["internationalization"]
.
Given
{
"like",
"love",
"hate",
"yes"
}
the longest words are ["like", "love", "hate"]
.
Challenge
Solution:
It's easy to solve it in two passes, can you do it in one pass?
两次遍历:
ArrayList<String> longestWords(String[] dictionary) {
ArrayList<String> result = new ArrayList<String>();
if (dictionary == null || dictionary.length == 0) {
return result;
}
int len = dictionary[0].length();
for (String i : dictionary) {
if(i.length() > len) {
len = i.length();
}
}
for (String i : dictionary) {
if(i.length() == len) {
result.add(i);
}
}
return result;
}
ArrayList<String> longestWords(String[] dictionary) {
if (dictionary == null || dictionary.length == 0) {
return null;
}
HashMap<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();
int max = 0;
for (String i : dictionary) {
int len = i.length();
if(len > max) {
max = len;
ArrayList<String> list = new ArrayList<String>();
list.add(i);
map.put(max, list);
} else if(len == max) {
map.get(max).add(i);
}
}
return map.get(max);
}
思路:
两次遍历:第一次找出最长的长度,第二次根据长度找string
一次遍历:利用HashMap记录长度。
HashTable 基本不用了,是同步的。如果需要同步,推荐用external同步的HashMap。