Hard 大文本找两个单词最短距离 @CareerCup

面试题 17.11.单词距离 LeetCode 面试题 17.11. 单词距离 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student" 输出:1 提示: words.length <= 10 阅读详情

如果只要找一次就用第一种O(n)解法

如果要找多次就多用一个Hashtable,把所有的组合都保存起来



package Hard;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import CtCILibrary.AssortedMethods;


/**
 * You have a large text file containing words. Given any two words, find the shortest distance (in terms of number of words) between them in the file. Can you make the searching operation in O(1) time? What about the space complexity for your solution?

译文:

有一个很大的文本文件,里面包含许多英文单词。给出两个单词,找到它们的最短距离 (以它们之间隔了多少个单词计数)。你能在O(1)的时间内返回任意两个单词间的最短距离吗? 你的解法空间复杂度是多少?
 *
 */
public class S18_5 {

	// O(n)
	public static int shortest(String[] words, String word1, String word2) {
		int min = Integer.MAX_VALUE;
		int lastPosWord1 = -1;
		int lastPosWord2 = -1;
		for (int i = 0; i < words.length; i++) {
			String currentWord = words[i];
			if (currentWord.equals(word1)) {
				lastPosWord1 = i;
				// Comment following 3 lines if word order matters
				int distance = lastPosWord1 - lastPosWord2;
				if (lastPosWord2 >= 0 && min > distance) {
					min = distance;
				}
			} else if (currentWord.equals(word2)) {
				lastPosWord2 = i;
				int distance = lastPosWord2 - lastPosWord1;
				if (lastPosWord1 >= 0 && min > distance) {
					min = distance;
				}
			}
		}
		return min;
	}

	//===============================================================================
	private static Map<HashSet<String>, Integer> distances = 
	        new HashMap<HashSet<String>, Integer>();
	 
	public static int query(String word1, String word2) {
		
		HashSet<String> pair = new HashSet<String>();
        pair.add(word1);
        pair.add(word2);
        if(distances != null && distances.containsKey(pair)){
        	return distances.get(pair);
		}
        return Integer.MAX_VALUE;
	    
	}
	
	public static void buildMap(String[] wordlist) {
	    // build the mapping between pairs of words to
	    // their shortest distances
	    for (int i = 0; i < wordlist.length; ++i) {
	        for (int j = i + 1; j < wordlist.length; ++j) {
	            if (!wordlist[i].equals(wordlist[j])) {
	                HashSet<String> pair = new HashSet<String>();
	                pair.add(wordlist[i]);
	                pair.add(wordlist[j]);
	                if (distances.keySet().contains(pair)) {
	                    int curr = distances.get(pair);
	                    if (j - i < curr)
	                        distances.put(pair, j - i);
	                } else {
	                    distances.put(pair, j - i);
	                }
	            }
	        }
	    }
	}
	
	
	
	public static void main(String[] args) {
		String[] wordlist = AssortedMethods.getLongTextBlobAsStringList();
		System.out.println(AssortedMethods.stringArrayToString(wordlist));

		String[][] pairs = { { "Lara", "the" }, { "river", "life" },
								  { "path", "their" }, { "life", "a" } };
		
		buildMap(wordlist);
		
		for (String[] pair : pairs) {
			String word1 = pair[0];
			String word2 = pair[1];
			int distance = shortest(wordlist, word1, word2);
			System.out.println("Distance between <" + word1 + "> and <" + word2 + ">: " + distance + ", " + query(word1, word2));
		}
	}
}


Ref: http://tianrunhe.wordpress.com/2012/06/04/shortest-distances-between-two-words-in-a-file/

java读取超大文本文件 java读取超大文本文件,java读取超大文本文件,java读取超大文本文件,java读取超大文本文件 立即下载

相关推荐

文本文件单词的检索与计数

要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。 (1)建立文本文件 (2)给定单词的计数 (3)检索单词出现在文本文件中的行号、次数及其位置 (4)主控菜单程序的结构 ① 头文件包含 ② 菜单选项包含 建立文件、单词定位、单词计数、退出程序 ③ 选择1-4执行相应的操作,其他字符为非法。

Leetcode 面试题 17.11. 单词距离(medium)

Leetcode 面试题 17.11. 单词距离(medium),Python题解

chenxy_bwave的专栏 955

编写一个程序,输出该文本文件中含有的单词总数,分析一个文本文件(英文文章)中 各个词出现的频率,输出该文本文件中所有单词的列表,并与出现次数一起打印出来

编写一个程序,分析一个文本文件(英文文章)中 各个词出现的频率,打印出来。文本文件为D:\test.txt ,输出该文本文件中含有的单词总数,分析一个文本文件(英文文章)中 各个词出现的频率,输出该文本文件中所有单词的列表,并与出现次数一起打印出来

【力扣每日一题】面试题 17.11. 单词距离

题目描述 有个内含单词的超大文本文件,给任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student" 输出:1 提示: words.length <= 100000 先用暴力来解一下:直接

a534563的博客 434

java实现找出两个文件中相同的单词(两种方法)

主要介绍了java实现找出两个文件中相同的单词(两种方法),需要的朋友可以参考下

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

程序员面试金典——解题总结: 9.18高难度题 18.5有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离

#include #include #include #include #include using namespace std; /* 问题:有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(也即相隔几个单词)。有办法在O(1)时间里完成搜索操作吗? 解法的空间复杂度如何? 分析:这个是编程之美的最短摘要算法。简单的例子: 假设

qingyuanluofeng的专栏 3197

RDKit实战:5分钟搞定药物分子相似性分析(附Python代码)

本文提供了一套基于RDKit的快速药物分子相似性分析实战指南。通过Python代码演示,从环境搭建、分子指纹(如Morgan指纹)计算到Tanimoto相似性排序与可视化验证,帮助研究者在5分钟内完成从海量化合物库中精准筛选潜在活性分子的全流程,提升药物发现效率。

weixin_29193359的博客 314

Leetcode面T17(11-20)树

Q17.11 单词距离 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student" 输出:1 提示: words.length <= 100000 来源:力

augfun的博客 1045

树莓派3-改装wifi外置天线

声明:本文只是技术性探讨,改装引起的产品损坏等后果,由用户自负! 改装主要有两种方法 方法一:直接替换原来的天线 1、移除原有的小陶瓷天线,就在Made in PRC(或UK)那边的那个 清理一下阻焊剂方便天线接地(图中PRC左侧) 2、焊接天线 天线的屏蔽层焊接到清理完阻焊剂的地方,中间的信号线焊接到PRC右侧焊盘。 3、最终的样子

huayucong的博客 2万+

TC3xx系列LMU与SPR实战:将关键算法从Flash搬移至PSPR提升5倍执行效率

在实际电机控制项目中,通过将FOC算法全部迁移到PSPR,我们不仅将执行时间从56μs降至11μs,还将最坏情况下的时间偏差控制在±0.3μs以内。实测数据:在TC397上执行Flash中的32位浮点矩阵乘法,平均每条指令需要8.7个周期,而同样的代码在PSPR中仅需1.2个周期。传统开发中,工程师往往将所有代码放在Flash中运行,这相当于让F1赛车在乡村公路上行驶。迁移后不仅平均执行时间缩短,更重要的是时间抖动从±15%降低到±2%以内,这对闭环控制系统至关重要。不是所有代码都适合迁移到PSPR。

weixin_31421613的博客 297

(算法)两个单词的最短距离

题目: 有个内含单词的超大文本,给定任意两个单词,找出这个文件中两个单词的最短距离。 思路: 通过两个两个变量来记录两个单词最后出现的位置,然后每次计算两者的距离,并更新最小距离。 假设需要重复查找任意两个单词的最短距离,则需要构造一个散列表,记录每个单词及其出现的位置。当查找某两个单词的最短距离时,只需找出该两单词所在列表差值最小的位置。 查找方法:可以将两个有序列表合并(列表元素包含...

weixin_33797791的博客 3225

攻防世界 web高手进阶区 9分题 Web_python_flask_sql_injection

继续ctf的旅程,开始攻防世界web高手进阶区的9分题,本文是Web_python_flask_sql_injection的writeup

闵行小鱼塘 1473

算法练习--单词距离

题目: 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "stu...

QilanAllen的博客 5487

VisionMaster脚本调试(VS)

使用VS调试VisionMaster 脚本

yu_fujiang的专栏 3294

【我的Android进阶之旅】Android自定义View实现一个游戏摇杆,来实现监听遥动的方向或者监听摇动的角度的功能

一、需求描述 去年有个需求,需要使用自定义View实现一个游戏摇杆,来识别上下左右摇动的方向。 有点类似下面这样的王者荣耀游戏摇杆的效果 二、业界已有的参考资料 在下面这篇博客介绍了如何自定义游戏摇杆 2.1 博客介绍 Android自定义摇杆 2.1.1 功能 支持自适应大小 支持2个方向、4个方向、8个方向的摇动监听 支持摇动角度获取 可选回调模式 支持可摇动区域自定义 支持摇杆自定义 支持设置图片、色值、Shape图形 2.1.2 效果图 2.1.3 设置回调方式 setCallBac

字节卷动 1409

给出两个单词,找到它们的最短距离

题目 有一个很大的文本文件,里面包含许多英文单词。给出两个单词,找到它们的最短距离 (以它们之间隔了多少个单词计数)。你能在O(1)的时间内返回任意两个单词间的最短距离吗? 你的解法空间复杂度是多少? 解答 先看一个例子,为了简单起见,我们假设文件里就只有以下两句话。然后, 我们现在来求is和name的最短距离。假设相邻的两个单词距离为1。 12What is

Before_Morning的专栏 3330

QGIS编译(跨平台编译)之五十六:QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

QGIS编译;QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

LuckyHanMo的博客 1898

程序员面试金典 - 面试题 17.11. 单词距离(multimap平衡二叉搜索树)

1. 题目 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "stud...

Michael是个半路程序员 3641

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

力扣每日一题小记(面试题 17.11. 单词距离)

题目与示例 题目 题目内容 有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 来源:力扣(LeetCode) 示例 1: 输入:words = [“I”,“am”,“a”,“student”,“from”,“a”,“university”,“in”,“a”,“city”], word1 = “a”, word2 = “student” 输出:1 文章目录题目与示例一、思路二

m0_51613674的博客 378

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

单词的距离(leetcode)

有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数),如果寻找过程在 这个文件中重复多次,而每次寻找的单词不同,你能优化吗? 方法一 ,双指法 class Solution: def findClosest(self, words, word1, word2): dis = float("inf") # 正无穷大 w1,w2 = -1,-1 i = 0 while i < len

浮云 1112

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

两个单词之间的最短距离

// Shuffle.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace::std; int shortest(vector &text,string word1,string word2) { int min=INT_MAX; int la

stophil的专栏 1139

leetcode-面试题 17.11. 单词距离

问题: 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗? 示例: 输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student" 输出:1 提示: words.length <= 100000 思路: 查找这两个单词的位置,通过双

xinxiang7 1351

careercup-高等难度 18.5

18.5 有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(也即相隔几个单词)。有办法在O(1)时间里完成搜索操作吗?解法的空间复杂度如何? 解法1:我们假设单词word1和word2谁在前谁在后无关紧要。要解决此题,我们需要遍历一次这个文件。在遍历期间,我们会记下最后看见word1和word2的地方,并把它们的位置存入lastPosWord1和lastPosW...

weixin_34356310的博客 287

面试题目——《CC150》高等难题

面试题18.1:编写一个函数,将两个数字相加。不得使用+或其他算数运算符。 package cc150.high; public class Add { public static void main(String[] args) { // TODO 自动生成的方法存根 } public int add(int a,int b){ //将两个数字相加,不得使用+或者其他算...

weixin_34387468的博客 357
上一篇: Hard 计算0到n之间2的个数 @CareerCup
下一篇: Hard 找最小的k个数(Selection Rank) @CareerCup
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值