当前位置: 首页 > news >正文

给一个字符串数组,输出不同的部分

豆包给出代码
image

/// <summary>
/// 字符串差异提取工具类(仅使用原字符串字符)
/// </summary>
public static class StringDiffExtractor
{/// <summary>/// 从字符串列表中提取差异部分,差异部分仅包含原字符串已有字符,且长度不小于指定最小值(若原字符串长度允许)/// </summary>/// <param name="inputStrings">输入的字符串列表</param>/// <param name="minLength">差异部分的最小长度(必须大于0)</param>/// <returns>各字符串对应的差异部分(完全来自原字符串)</returns>/// <exception cref="ArgumentOutOfRangeException">当minLength小于或等于0时抛出</exception>public static List<string> ExtractDiffParts(List<string> inputStrings, int minLength){List<string> diffResults = new List<string>();if (inputStrings == null || inputStrings.Count == 0)return diffResults;// 单元素场景:差异部分就是字符串本身(长度不足时返回全部,不补位)if (inputStrings.Count == 1){string singleStr = inputStrings[0];diffResults.Add(singleStr); // 直接返回原字符串,不添加任何外部字符return diffResults;}int commonPrefixLength = CalculateCommonPrefixLength(inputStrings);int commonSuffixLength = CalculateCommonSuffixLength(inputStrings);foreach (string str in inputStrings){// 1. 原始差异区域(前缀后、后缀前)int originalDiffStart = commonPrefixLength;int originalDiffLength = str.Length - commonPrefixLength - commonSuffixLength;// 2. 计算需要扩展的长度(但不能超出字符串范围)int needExtendLength = Math.Max(0, minLength - originalDiffLength);int maxPossibleExtend = originalDiffStart; // 最多能向前扩展的长度(不能超过前缀起始位置)int actualExtendLength = Math.Min(needExtendLength, maxPossibleExtend);// 3. 调整提取范围(确保所有字符都来自原字符串)int adjustedStartIndex = originalDiffStart - actualExtendLength;int adjustedDiffLength = originalDiffLength + actualExtendLength;// 4. 最终提取(若总长度仍不足minLength,返回能提取的最大长度)if (adjustedStartIndex + adjustedDiffLength > str.Length){adjustedDiffLength = str.Length - adjustedStartIndex;}string diffPart = adjustedDiffLength > 0? str.Substring(adjustedStartIndex, adjustedDiffLength): string.Empty;diffResults.Add(diffPart);}return diffResults;}/// <summary>计算共同前缀长度</summary>private static int CalculateCommonPrefixLength(List<string> strings){int minStrLength = strings.Min(s => s.Length);for (int i = 0; i < minStrLength; i++){char currentChar = strings[0][i];if (strings.Any(s => s[i] != currentChar))return i;}return minStrLength;}/// <summary>计算共同后缀长度</summary>private static int CalculateCommonSuffixLength(List<string> strings){int minStrLength = strings.Min(s => s.Length);for (int i = 1; i <= minStrLength; i++){char currentChar = strings[0][strings[0].Length - i];if (strings.Any(s => s.Length < i || s[s.Length - i] != currentChar))return i - 1;}return minStrLength;}public static void Test1(){// 测试数据var testData = new List<string>{"2T1283223072900029D1ZZZ","2T1283223072900028D2ZZZ","2T1283223072900027D3ZZZ","2T1283223072900026D4ZZZ","2T1283223072900025D5ZZZ","2T1283223072900024D6ZZZ"};var results1 = StringDiffExtractor.ExtractDiffParts(testData, 0);testData = new List<string>{"NL5285A24071300005DEDF","NL5285A24071300004DEDF","NL5285A24071300003DEDF","NL5285A24071300002DEDF"};var results2 = StringDiffExtractor.ExtractDiffParts(testData, 0);testData = new List<string>{"NL5285A24071300005","NL5285A24071300004","NL5285A24071300003","NL5285A24071300002"};var results3 = StringDiffExtractor.ExtractDiffParts(testData, 0);testData = new List<string>{"E26U00089","E26U00090","E26U00091"};var results4 = StringDiffExtractor.ExtractDiffParts(testData, 0);}public static void Test2(){// 测试数据var testData = new List<string>{"2T1283223072900029D1ZZZ","2T1283223072900028D2ZZZ","2T1283223072900027D3ZZZ","2T1283223072900026D4ZZZ","2T1283223072900025D5ZZZ","2T1283223072900024D6ZZZ"};var results1 = StringDiffExtractor.ExtractDiffParts(testData, 4);testData = new List<string>{"NL5285A24071300005DEDF","NL5285A24071300004DEDF","NL5285A24071300003DEDF","NL5285A24071300002DEDF"};var results2 = StringDiffExtractor.ExtractDiffParts(testData, 4);testData = new List<string>{"NL5285A24071300005","NL5285A24071300004","NL5285A24071300003","NL5285A24071300002"};var results3 = StringDiffExtractor.ExtractDiffParts(testData, 4);testData = new List<string>{"E26U00089","E26U00090","E26U00091"};var results4 = StringDiffExtractor.ExtractDiffParts(testData, 4);}
}
http://www.hskmm.com/?act=detail&tid=30405

相关文章:

  • 连接 USB 设备
  • SpringBoot-day1(快速上手SpringBoot,SpringBoot简介,SpringBoot基础配置,属性配置,yaml文件) - a
  • Chroma私有化:本地部署完整方案
  • 嵌入式-C++面经2
  • PHP转Go系列 | 如何将 PHP 项目快速迁移到 Go 上?
  • 详细介绍:【OpenHarmony】用户文件服务模块架构
  • 详细介绍:全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!
  • “环境变量”是什么, 为什么要配置环境变量 --初学者
  • AI元人文:对大模型的召唤——未来哪吒
  • https与http区别思维拓扑图 - krt
  • Java 装饰器模式(Decorator) - krt
  • Python INI 文件读写利器 configparser
  • tcp/ip五层协议模型--思维拓扑图 - krt
  • springboot模式与应用案例--思维拓扑图 - krt
  • DAY04
  • AlexNet vs LeNet 对比实验
  • QT:获取文件信息之创建日期方法created()方法--废弃
  • 排列组合 容斥 总结
  • 10.13每日总结
  • 新学期每日总结(第7天)
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • Day 9
  • 14 10.13
  • 日志|前端框架Vue
  • oop.shiyan1
  • 玄机——第一章 应急响应-Linux日志分析 wp
  • 第四周第五天4.5
  • 深入解析:flutter AudioPlayer的使用问题及处理
  • 11 10.10
  • 12 10.11