当前位置: 首页 > 编程语言 > C#

在字符串列表中查找公共字符串分享

时间:2023-04-11 10:30:40 C#

C#学习教程:在字符串列表中查找公共字符串如果我能看一下,昨天有人向我提出了一个问题。我感觉很亲近,但我认为这里的一些人也会喜欢挑战,我迷路了。如果我有一个包含以下成员的列表:TodayMondayTuesdayWednesday我想得到一个返回字符串day因为那是List中最大的公共字符串。这样做应该不考虑位置和字符串长度,只是想在一组字符串中找到最大长度的公共字符串。我的尝试有点失败,我选择了:Mon-TuesMon-Wed然后在每个之间相交。显然,这将返回多个字符串,但对于星期一至星期三,您会得到nday,因为这是它的常用字母。这是我的代码:Liststrs=newList();strs.Add("星期一");strs.Add("星期二");strs.Add("星期三");varv=strs.SelectMany((day,i)=>strs.Select((day2,j)=>new{iDay=i,Day=day,iDay2=j,Day2=day2})).Where(x=>x.iDay!=x.iDay2).Select(x=>newstring(x.Day.Intersect(x.Day2).ToArray()));有没有人有一个漂亮而整洁的解决方案?请注意,如果没有公共字符串,则不必是LINQ返回null或空字符串。这比我的第一种方法(罢工)效果更好。您可以使用以下扩展来获取列表中最短字符串的所有子字符串(为了提高效率):.Range(0,word.Length-charIndex1+1)其中charIndex2>0选择word.Substring(charIndex1,charIndex2);}stringshortest=list.OrderBy(s=>s.Length).First();IEnumerableshortestSubstrings=shortest.getAllSubstrings().OrderByDescending(s=>s.Length);varother=list.Where(s=>s!=shortest).ToArray();stringlongestCommonIntersection=string.Empty;foreach(stringsubStrinshortestSubstrings){boolallContains=other.All(s=>s.Contains(subStr));如果(allContains){longestCommonIntersection=subStr;休息;}}DEMO在列表中找到最短的条目。所以我们用“今天”。以“最长优先”顺序为“今天”中的每个字符构建字符串长度的字符串列表。“今天”、“Toda”、“今天”、“Tod”、“oda”、“day”、“To”、“od”、“da”、“ay”、“t”、“o”、“d”","a","y"枚举此列表,找到所有其他字符串都包含此条目的第一个条目。Listwords=newList{"Today","Monday","Tuesday","Wednesday"};//在列表中选择最短的单词stringshortestWord=(fromwordinwordsorderbyword.Lengthselectword).First();intshortWordLength=shortestWordLength;//按长度顺序构建连续字符串列表。列表部分=newList();for(intpartLength=shortWordLength;partLength>0;partLength--){for(intpartStartIndex=0;partStartIndexs.Contains(part))选择部分).FirstOrDefault();//longestSubString是所有单词中最长的部分,如果没有找到匹配项,则为null。编辑想想看,你可以优化一下。您无需构建部件列表-只需在部件生成时对其进行测试即可。此外,通过按长度顺序对单词列表进行排序,您始终会先针对最短的字符串进行测试,以便更快地拒绝候选人。以上就是C#学习教程:在字符串列表中查找所有公共字符串共享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——stringlongestSubString=null;Listwords=newList{"Todays","Monday","Tuesday"};//按长度排序单词列表ListwordsInLengthOrder=(fromwordinwordsorderbyword.Lengthselectword).ToList();stringshortestWord=wordsInLengthOrder[0];intshortWordLength=shortestWord.Length;//按长度顺序处理连续的字符串。对于(intpartLength=shortWordLength;(partLength>0)&&(longestSubString==null);partLength--){for(intpartStartIndex=0;partStartIndexs.Contains(part))){longestSubString=part;休息;}}}Console.WriteLine(longestSubString);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: