写个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

相关文章

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-