在上一篇“找最小字符串”里,用了一个最傻的办法,找出关键字里的每一个字符串在内容里的位置,然后比较同时存在三个关键字时,最大位置和最小位置的差值,找出最小,实现之后一直很不甘心,觉得代码长不说,逻辑还不是那么明确,算法还那么复杂,绕来绕去,冥思苦想,睡前由生一法,早上起来试了试,哇塞,对头:
在确保所有关键字都包含的情况下,每次从content尾向前挪动一个位置,都从content的头部到尾遍历一遍,碰上小的就付给result,直到完全遍历完
package test;
import java.util.ArrayList;
import java.util.List;
/**
* @author hy
* 2011/6/13
*/
public class FindAbstract {
static String content[] = { "a", "c", "d", "a", "c", "b", "d", "e", "a","a","b"};
static String keyword[] = { "b", "c", "d" };
static List<String> contentList = new ArrayList<String>();
public static void main(String args[]) {
List<String> result = new ArrayList<String>();
int begin = 0;
int end = content.length;
// 将content内容从数组形式变换成List型
for (int i = 0; i < end; i++)
contentList.add(i, content[i]);
// 输出给定的content和keyword
System.out.print("[content]: ");
for (int i = 0; i < content.length; i++)
System.out.print(content[i] + " ");
System.out.println();
System.out.print("[keyword]: ");
for (int i = 0; i < keyword.length; i++)
System.out.print(keyword[i] + " ");
System.out.println();
// 输出最短摘要
result = contentList;
System.out.println("[AllMatch]:");
for (end = content.length; end - begin >= keyword.length; end--) {
for (begin = 0; end - begin >= keyword.length; begin++) {
if (isAllHave(contentList.subList(begin, end), keyword)
&& result.size() > contentList.subList(begin, end)
.size()){
result = contentList.subList(begin, end);
System.out.println(" "+result);
}
}
begin = 0;
}
System.out.println("[ShortestMatch]: "+result);
}
// 是否都包含所有关键字
static boolean isAllHave(List<String> arr, String key[]) {
boolean is = false;
int temp = 0;
for (int i = 0; i < key.length; i++)
if (isKeywordIn(arr, key[i]))
temp++;
if (temp == key.length)
is = true;
return is;
}
// 是否包含单个关键字
static boolean isKeywordIn(List<String> arr, String key) {
int i;
for (i = 0; i < arr.size(); i++)
if (arr.get(i) == key)
return true;
return false;
}
}
输出结果:
[content]: a c d a c b d e a a b
[keyword]: b c d
[AllMatch]:
[c, d, a, c, b, d, e, a, a, b]
[d, a, c, b, d, e, a, a, b]
[a, c, b, d, e, a, a, b]
[c, b, d, e, a, a, b]
[c, b, d, e, a, a]
[c, b, d, e, a]
[c, b, d, e]
[c, b, d]
[ShortestMatch]: [c, b, d]
分享到:
相关推荐
用贪心算法解单源最短路径问题 在计算机科学和信息技术领域中,单源最短路径问题是指从一个源点到其他顶点的最短路径问题。它是一种典型的图论问题,广泛应用于交通网络、通信网络、计算机网络等领域。贪心算法是...
最短路径问题 大一数据结构最短路径问题
JAVA版动态规划解决最短路径问题 啊
最短路径问题在计算机科学和运筹学中是一项核心任务,尤其在图论与网络分析领域,它旨在找出网络中的最短路径,以便优化资源分配、提高效率或解决其他相关问题。Floyd算法,又称为Floyd-Warshall算法,是解决这一...
lingo解最短路径问题。城市之间线路及距离已知。从某个城市出发,到达目的城市,通过lingo编程选取最短路径。
文件Digest.java中extractSummary为摘要函数,具体用法详见main函数
综上所述,遗传算法在求解最短路径问题上具有较大的潜力,尤其适用于解决大规模和复杂的网络问题。通过上述介绍,可以看出遗传算法不仅是一种通用的搜索框架,而且其应用到最短路径问题中时,可以灵活地结合特定问题...
【单源点最短路径问题】是指在图论中,给定一个有向图G=(V,E),其中V是顶点集合,E是边集合,每个边e上有权重c(e),我们想要找到从一个特定顶点V0出发到图中其他所有顶点的最短路径。这个问题通常出现在网络优化、...
综上所述,解决这个问题涉及的知识点包括图论、最短路径算法(如Dijkstra或Bellman-Ford)、优先队列数据结构、以及如何在C++中实现这些算法。通过对这些概念的深入理解和熟练应用,我们可以有效地解决这个关于课程...
根据给定的信息,本文将详细解释Java实现的最短路径问题动态规划算法。该程序的主要目的是寻找图中各个节点到指定终点的最短路径,并输出每个节点到终点的最短距离以及达到这些最短距离时的决策路径。 ### 1. 问题...
最短路径问题可以被归类为图算法的一种,它旨在找出图中两个节点之间的最短路径,同时考虑路径上的权重。在多段图中,路径不仅跨越单一类型的边,而是经过多个不同的阶段,每个阶段可能有不同的权值或约束条件。解决...
### 最短路径问题在多阶段决策问题中的应用 #### 一、引言 最短路径问题作为图论中的经典问题之一,在多个领域有着广泛的应用,尤其是在解决多阶段决策问题时表现出了极大的价值。多阶段决策问题的特点在于决策...
"基于贪心法求解单源最短路径问题" 本资源是关于基于贪心法求解单源最短路径问题的实验报告,包括实验内容、算法设计、算法描述、算法正确性证明、算法分析、算法实现与测试等部分。 实验目的:理解贪心法的核心...
本篇文章将深入探讨这个问题,并通过C++语言来阐述解决方案。 首先,我们要理解公交车最短路径问题的本质。假设有一个城市公交系统,每个公交车站可以看作图中的节点,而公交车线路则表示节点之间的边。每条边通常...
在“分支定界算法求解带约束的最短路径问题”中,我们聚焦于如何利用这种算法来解决一个特定类型的网络流问题,即在满足特定约束条件下找出从起点到终点的最短路径。 最短路径问题是一个经典的图论问题,Dijkstra...
《数据结构课程设计》最短路径问题实验报告主要围绕如何设计和实现一个交通咨询系统,该系统能够解决从一个城市到另一个城市的最短路径、最低花费或最少时间的问题。在这个实验报告中,我们重点关注以下几个核心知识...
根据给定的信息,本文将对“最短路径问题代码”中的关键知识点进行详细的解析与说明。这段代码使用了C++语言实现了一种求解最短路径的方法,具体来说,它采用了类似于Dijkstra算法的思想来计算图中各节点到指定起点...
在计算机科学领域,寻找最短路径问题是一个常见且重要的任务,尤其在路由算法、网络分析、图论等问题中。本文将深入探讨如何利用广度优先搜索(BFS)解决最短路径问题,以及如何结合文件读取技术实现这一过程。在...