算法编程(十九):词典中最长的单词

简介: 算法编程(十九):词典中最长的单词

写在前面


今天的这道题,是要在一个整数数组中,找出一个单词,这显然是一个关于数组的题目,但是这道题更像是一个关于字符串的题目。

因为在题目中,处理数组要比起处理字符串要简单的多。

既然如此,下面就一起来看一下吧。

image.png

题目解读


根据题目的描述来看,这道题就是要找出一个元素,保证这个元素是通过一个单词依次加入一个字母形成的。

如果数组中存在多组符合要求的元素,则取下标索引最小的一个元素。

在这道题,要善用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;
    }
}
执行结果


这次的执行结果一般吧,效率还是没有提上来。

image.png

其他思路


有的大佬在使用字典树的方式来解决这个问题,大家可以试一下,但是我感觉不太好理解。

总结


这道题看上去简单,其实有很多坑在里面,所以只需要搞清这道题的一些特殊情况,就能解出这道题来。


相关文章
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- MD5算法和SHA算法
火山中文编程 -- MD5算法和SHA算法
19 0
火山中文编程 -- MD5算法和SHA算法
|
4月前
|
算法 Java
算法编程(三十):交替合并字符串
算法编程(三十):交替合并字符串
47 0
|
4月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
35 0
|
4月前
|
算法
算法编程(二十七):千位分隔数
算法编程(二十七):千位分隔数
40 0
算法编程(二十七):千位分隔数
|
4月前
|
存储 算法
算法编程(二十六):判断路径是否相交
算法编程(二十六):判断路径是否相交
29 0
|
4月前
|
算法
算法编程(二十五):检查单词是否为句中其他单词的前缀
算法编程(二十五):检查单词是否为句中其他单词的前缀
35 0
|
3月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
32 1
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
73 0
|
29天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0
|
1月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
28 0