持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
写在前面
今天的这道题,是要在一个整数数组中,找出一个单词,这显然是一个关于数组的题目,但是这道题更像是一个关于字符串的题目。
因为在题目中,处理数组要比起处理字符串要简单的多。
既然如此,下面就一起来看一下吧。
题目解读
根据题目的描述来看,这道题就是要找出一个元素,保证这个元素是通过一个单词依次加入一个字母形成的。
如果数组中存在多组符合要求的元素,则取下标索引最小的一个元素。
在这道题,要善用Set集合存储元素,之后就可以在循环体中判断是否存在子元素之类。
可以通过双重循环来获取子元素路径是否存在。
具体的情况,大家可以看一下代码的编写过程。
代码实现
本次执行代码如下,大家可以自行参考一下。
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.longestWord(new String[]{"w", "wo", "wor", "worl", "world"}));
}
public String longestWord(String[] words) {
String result = "";
Set<String> set = new HashSet<String>();
Collections.addAll(set, words);
for (String s : set) {
int n = s.length(), m = result.length();
if (n < m) {
continue;
}
if (n == m && s.compareTo(result) > 0) {
continue;
}
boolean flag = true;
for (int i = 1; i <= n; i++) {
String substring = s.substring(0, i);
if (!set.contains(substring)) {
flag = false;
break;
}
}
if (flag) {
result = s;
}
}
return result;
}
}
执行结果
这次的执行结果一般吧,效率还是没有提上来。
其他思路
有的大佬在使用字典树的方式来解决这个问题,大家可以试一下,但是我感觉不太好理解。
总结
这道题看上去简单,其实有很多坑在里面,所以只需要搞清这道题的一些特殊情况,就能解出这道题来。