求个字符串比较算法

hnljlhs 2014-10-16 12:56:35
假设有字符串s=ABCDEFGH
在s中随机插入一些字符例如:
s=A0012B2C56DE34H
为了方便问题描述我这里插入的全是数字,实际可能包含任何键盘可输入的字符
如何才能快速找出插入的字符:0012 2 56 34
有人给个好点的思路吗?
一个一个比较速度有点慢。。当s长度比较大时
...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnljlhs 2014-11-26
  • 打赏
  • 举报
回复
忘记结贴了,虽然还是没有想找到好的办法,谢谢各位了
hnljlhs 2014-10-17
  • 打赏
  • 举报
回复
引用 8 楼 of123 的回复:
这种问题应当在插入时解决,而不是解析时。 可以有多种协议来处理这类情况。比如插入的字符可能已经存在,可以先插入一个前导的非键盘输入字符,例如 0xFF,然后再插入实意字符。
因为是随机插入的,不可控,所以只能在插入后来比较
hnljlhs 2014-10-17
  • 打赏
  • 举报
回复
我想到用分块来比较应该比较快一点,分块长度考虑取S1的1/10吧,没测试不知道效果,只是想法。 假设: 原串:S1="ABCDEFGHIJKLMNOPQRST" 新串:S2="A01BB235CDE589F695GH785I345J1312KLMN9897OOPQ898R234S34STT" 新串中红色部分为插入与原串中相同的字符 分块比较是:S1,S2从左边开始每次都截相同长度进行比较,载取长度定义为L变量,中间字符串定义为变量S3,初值S3=S2 如果S1L=S2L就不处理 '// 分块的目的就是这步可以节省一点时间 如果S1L<>S2L,逐个比较找出不相同的字符存入动态数组Z(),然后把S2L中不相同字符替换为空赋值给变量T=replace(S2L,Z(n),"") ,S3=replace(S3,S2L,T) 如果S3=S1结束 如果S3<>S1循环从下一个位置开始截取比较。 分块应该是有效率的吧,假设 S1长度1000 S2长度1001 只要找到一次不相同的程序就结束了,不必一一比较 我想红色部分应该也能正确找出
of123 2014-10-17
  • 打赏
  • 举报
回复
这种问题应当在插入时解决,而不是解析时。 可以有多种协议来处理这类情况。比如插入的字符可能已经存在,可以先插入一个前导的非键盘输入字符,例如 0xFF,然后再插入实意字符。
hnljlhs 2014-10-17
  • 打赏
  • 举报
回复
引用 6 楼 Topc008 的回复:
如果插入的字符与原始字符存在相同呢?这个很复杂吧,还需要更多的条件限制在能准确找出后添加的字符....
谢谢提醒,这个很重要,插入相同的也是要解决的问题
平头哥哥 2014-10-16
  • 打赏
  • 举报
回复
随机插入,设计不明
一如既往哈 2014-10-16
  • 打赏
  • 举报
回复
如果插入的字符与原始字符存在相同呢?这个很复杂吧,还需要更多的条件限制在能准确找出后添加的字符....
of123 2014-10-16
  • 打赏
  • 举报
回复
逐个遍历是不可避免的。即使是调用其他控件或函数,后台还是要遍历的。 加快的窍门在于不要对原字符串作改动,例如在循环中删除非数字的字符,也不要通过增补结果字符串的方法来得到新字符串。因为长字符串的空间重新分配是耗时较多的,最好避免重复的字符串操作。

Dim bResult() As Byte, sSource As String, i As Long, n As Long
Dim sResult As String

sSource = "A0012B2C56DE34H"
ReDim bResult(Len(sSource) - 1)
For i = 1 To Len(sSource)
    If Mid(sSource, i, 1) <= "9" Then
        n = n + 1
        bResult(n - 1) = Asc(Mid(sSource, i, 1))
    ElseIf i > 1 Then
        If Mid(sSource, i - 1, 1) <= "9" Then
            n = n + 1
            bResult(n - 1) = 32
        End If
    End If
Next i
ReDim Preserve bResult(n - 1)
sResult = StrConv(bResult, vbUnicode)

MsgBox sResult
hnljlhs 2014-10-16
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
google kmp lcs algorithm
去谷歌搜?
hnljlhs 2014-10-16
  • 打赏
  • 举报
回复
引用 1 楼 xxxxing 的回复:
随机插入,设计不明
设计不明是指? 没有说明是否要考虑字符位置、顺序的不同吗?还有在s字符串中减少的情况
threenewbee 2014-10-16
  • 打赏
  • 举报
回复
google kmp lcs algorithm

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧