写个Unix的diff命令的简化版本

2024-05-28 08:58

本文主要是介绍写个Unix的diff命令的简化版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

未完成。

class Solution {public static String diff(String file1, String file2) {StringBuffer sb = null;try {BufferedReader br1 = new BufferedReader(new FileReader(file1));String inString = null;HashMap<String, ArrayList<Integer>> firstMap = new HashMap<>();int i = 0;ArrayList<String> lines1 = new ArrayList<>();ArrayList<String> lines2 = new ArrayList<>();while((inString = br1.readLine()) != null) {if(!firstMap.containsKey(inString)) firstMap.put(inString, new ArrayList());firstMap.get(inString).add(i);i++;lines1.add(inString);}BufferedReader br2 = new BufferedReader(new FileReader(file2));while((inString = br2.readLine()) != null) {lines2.add(inString);}HashMap<Integer, Integer> overlap = new HashMap<>();HashMap<Integer, Integer> _overlap = new HashMap<>();int subStartFirst = 0;int subStartSecond = 0;int maxOverlap = 0;for (int j = 0; j < lines2.size(); j++) { String key = lines2.get(j);if(firstMap.containsKey(key)) {for(int index : firstMap.get(key)) {int exist = 0;if(overlap.containsKey(index - 1))exist = overlap.get(index - 1);int update = ((index == 0 || exist == 0) ? 0 : exist) + 1;_overlap.put(index, update);if(update > maxOverlap) {maxOverlap = update;subStartFirst = index - maxOverlap + 1;subStartSecond = j - maxOverlap + 1;}}}overlap.clear();overlap.putAll(_overlap);_overlap.clear();}sb = new StringBuffer();if(maxOverlap == 0) {if(lines1.size() == 0) {sb.append("0a1," + lines2.size() + "\n");for(String s : lines2) {sb.append("> " + s + "\n");}} else {sb.append("[");  }}} catch (IOException ex) {ex.printStackTrace();}return sb.toString();}
}


这篇关于写个Unix的diff命令的简化版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010111

相关文章

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用