如何提取字符串中(1,2,4)的所有有序排列组合及对应下标位置
逗号分隔字符串指定有序数字组合提取实现
需求说明
- 输入为逗号分隔的数字字符串,仅提取属于集合
{1,2,4}的数字 - 按照1→2→4的数值从小到大顺序生成所有合法组合,若某数字无匹配值则该层级不参与组合
- 同时输出每个组合对应数字在原字符串中的下标位置
现有问题分析
原有代码仅按遍历顺序输出所有匹配的单个数字,未按数值顺序生成配对组合,也无法输出组合对应的下标信息。
实现思路
- 首次遍历拆分后的字符串,分别收集1、2、4三个数字的所有出现下标,存入三个独立列表
- 根据列表是否为空,生成对应层级的组合:
- 仅1有值:输出所有1的下标
- 1、2有值:输出所有符合顺序要求的1下标和2下标的配对组合
- 1、2、4都有值:输出所有符合顺序要求的1下标、2下标、4下标的三元配对组合
- 按需求格式化输出组合的数值和对应下标
注意:如果要求组合内数字按原始字符串出现顺序先后(即1出现在2前,2出现在4前),可在循环中增加下标大小判断,不需要顺序仅要求值的有序组合可删除该判断。
完整实现代码
' 拆分输入字符串 Dim strWords() As String = TextBox1.Text.Split(","c) Dim list1 As New List(Of Integer)() ' 存储所有值为1的下标 Dim list2 As New List(Of Integer)() ' 存储所有值为2的下标 Dim list4 As New List(Of Integer)() ' 存储所有值为4的下标 ' 第一步:收集所有符合要求的数字下标 For i As Integer = 0 To strWords.Length - 1 Dim num As Integer = 0 If Integer.TryParse(strWords(i), num) Then Select Case num Case 1 : list1.Add(i) Case 2 : list2.Add(i) Case 4 : list4.Add(i) End Select End If Next TextBox2.Clear() ' 第二步:生成所有组合并输出 ' 存在4的情况输出三元组合 If list4.Count > 0 Then For Each idx1 In list1 For Each idx2 In list2 ' 要求2在1之后则保留该判断,不需要则删除 If idx2 > idx1 Then For Each idx4 In list4 ' 要求4在2之后则保留该判断,不需要则删除 If idx4 > idx2 Then ' 数值输出可自行切换为逐行输出1、2、4 TextBox2.AppendText("1,2,4" & vbNewLine) ' 输出对应下标 TextBox2.AppendText($"({idx1},{idx2},{idx4})" & vbNewLine) End If Next End If Next Next Else ' 不存在4的情况输出二元组合 If list2.Count > 0 Then For Each idx1 In list1 For Each idx2 In list2 ' 要求2在1之后则保留该判断,不需要则删除 If idx2 > idx1 Then ' 数值输出可自行切换为逐行输出1、2 TextBox2.AppendText("1,2" & vbNewLine) ' 输出对应下标 TextBox2.AppendText($"({idx1},{idx2})" & vbNewLine) End If Next Next Else ' 不存在2的情况仅输出1 For Each idx1 In list1 TextBox2.AppendText("1" & vbNewLine) TextBox2.AppendText($"({idx1})" & vbNewLine) Next End If End If
样例验证
第一个样例
输入字符串:3,7,1,2,3,5,2,3,5,6,9,6,7,5,9,3,7,9,1,5
- 收集结果:list1=[2,18],list2=[3,6],list4=[]
- 保留下标先后判断的情况下输出2组
1,2,对应下标为(2,3)、(2,6),符合预期。
第二个样例
输入字符串:2,4,5,1,8,1,3,4,1,5,6,9,3,9,4,5,6,8,9,4
- 收集结果:list1=[3,5,8],list2=[0],list4=[1,7,14,19]
- 删除下标先后判断的情况下,第一个输出组合为
1,2,4,对应下标(3,0,1),符合预期。
内容的提问来源于stack exchange,提问作者Angga Sillvert
相关产品推荐
相关产品推荐

