来讨论个算法,组合单词。

只看楼主收藏回复

编写一段程序,从标准输入中读取一列单词,并打印其中由两个单词组成的组合词。比如:输入after ,thought,afterthought。那么输出afterthought。


来自iPhone客户端1楼2017-09-14 09:24回复
    唔。排序后暴力查找直到长度L1+L2==L3再用字符串拼接的方法谁都会。


    来自iPhone客户端2楼2017-09-14 09:25
    回复
      我是想说有没有巧妙一点的办法,大神来帮忙想想。


      来自iPhone客户端3楼2017-09-14 09:25
      回复
        先艾特我的老哥。


        来自iPhone客户端4楼2017-09-14 09:27
        回复
          @碎冰op


          来自iPhone客户端5楼2017-09-14 09:28
          回复
            欧几里得距离算法,通过数据模型相似度建立空间模型。越接近的数据模型就越相似。


            6楼2017-09-14 09:57
            收起回复
              7楼2017-09-14 09:59
              回复
                求任意两个单词的连接吗,
                考虑到两个单词可以正连接反连接,
                又考虑到不重复遍历
                所以就
                for i=0 to n-1
                for j =i+1 to n


                来自Android客户端8楼2017-09-14 10:01
                收起回复
                  发个原题看看


                  来自Android客户端9楼2017-09-14 10:14
                  收起回复
                    d


                    来自iPhone客户端10楼2017-09-14 22:33
                    回复
                      我们有O(n^3)的暴力算法。


                      来自Android客户端11楼2017-09-15 06:50
                      收起回复
                        O(n^2)算法:第一遍扫描找到最大长度(单词最多也没多长),建立一个集合数组,按单词长度添加进去。双重for循环找到L1+L2相等的那个集合,然后用集合的contain函数判断。因为是hashset,查找用常数级别,故总时间取决于输入的平方级别。


                        来自iPhone客户端14楼2017-09-15 07:01
                        回复
                          所有输入单词塞到二叉查找树里。
                          对每个单词,从所有位置把它分成两段,查这两段在不在树里。
                          复杂度 n m lnn
                          m是最长词的长度。


                          来自Android客户端15楼2017-09-15 07:03
                          收起回复
                            15楼老哥给了相当棒的方法。但我觉得哈希表插入更快。


                            来自iPhone客户端16楼2017-09-15 07:14
                            回复
                              另外,如果使用C++,求子串会有一个复制过程,有额外开销。使用java的子串函数只是将头、尾引用纪录,不会有复制。可能会小一些开销。


                              来自iPhone客户端17楼2017-09-15 07:16
                              回复