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实现找出两个文件中相同的单词(两种方法),需要的朋友可以参考下

项目管理——14规划绩效域论文套路

规划绩效域论文套路

Flee Elf 1153

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

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

qingyuanluofeng的专栏 3197

Innovus 安装全过程

【代码】Innovus 安装全过程。

lmyynlbcy的博客 5537

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

T型三电平关管顺序要求

摘要: T型三电平拓扑中,IGBT关断必须遵循“外管先关、内管后关”的时序,否则易导致器件损坏。正常导通时,外管与内管共同分担电压;正确关断时,外管先关使电流经内管续流至中点,避免电压过冲;若内管先关,电流路径被强制切断,杂散电感引发高压尖峰击穿器件。这一时序本质是为电流提供低应力续流路径,需通过硬件或软件严格保障。

yun0804的博客 2381

开源滑翔伞升降速度表:基于STM32与传感器融合的DIY飞行仪表

传感器融合是现代嵌入式系统与物联网设备中的核心技术,它通过整合多个传感器的数据,利用滤波与估计算法,获得比单一传感器更精确、更可靠的环境感知能力。其技术价值在于提升系统的鲁棒性、精度和上下文理解能力,广泛应用于无人机导航、可穿戴设备、工业监测及智能驾驶等领域。本文聚焦于一个具体的工程实践案例——开源多功能滑翔伞升降速度表(Open-Vario),该项目巧妙地运用了**卡尔曼滤波器**进行气压与GNSS数据的融合,以精确计算升降率,并基于**FreeRTOS**实时操作系统构建了一个稳定、可扩展的嵌入式平台,

weixin_33657398的博客 176

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

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

weixin_33797791的博客 3225

基于DSP28335的Matlab/Simulink代码生成实验七:A/D采样

实验七:讲解如何使用DSP的ADC模块,通过代码生成技术控制DSP进行电流采样,是后续实现电机闭环控制的重要环节。通过简单的实验来熟悉代码生成的过程。最终实现复杂算法代码自动生成,进行高性能电机控制!

m0_73869369的博客 4725

算法练习--单词距离

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

QilanAllen的博客 5487

Inside NAND Flash Memories.中文版. Chatper 2 [2.1-2.2.1]

2.1 Introduction 半导体存储器分类: RAM:Random Access Memories--掉电丢失 ROM:Read Only Memories--只读,出厂时写好;掉电不丢失;不可更改。 NVM:Non-Volatile Memories--电可擦除/写入,并且掉电不丢失。第一类产品为EPROM memory (Erasable Programmable Read...

xuqikang的专栏 3606

【推荐100个unity插件】基于关节物理控制的自行车、电动车、摩托车模拟解决方案——Simple Bicycle Physics

摘要 "简易自行车物理"是Unity的自行车模拟资源包,支持Animation Rigging,实现基于关节物理的自行车控制。兼容所有平台和渲染管线,包含预制体、材质、脚本等资源。核心脚本Bicycle Controller管理自行车物理属性,支持自定义角色设置和移动端控制。安装后,用户可快速配置骑行场景,调整转向、速度、重心等参数,并支持地面贴合、兔跳等功能。适用于开发各类自行车模拟游戏和应用。 (字数:149)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1366

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

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

Before_Morning的专栏 3330

iStoreOS路由器(openwrt软路由) AdGuard Home 客户端 IP 总是 localhost(127.0.0.1)?这样设置让你精准识别真实IP!

在iStoreOS等软路由上部署AdGuard Home时,客户端IP常显示为localhost(127.0.0.1)。本文详细介绍如何让adguardhome直接识别客户端真实IP🌐,帮助你实现网络流量的精准追踪和管理。🔍

XiaoqiangClub的博客 2253

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

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

Michael是个半路程序员 3641

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

m0_51613674的博客 378

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

单词的距离(leetcode)

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

浮云 1112

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

两个单词之间的最短距离

// 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、付费专栏及课程。

余额充值