找回密码
 加入
搜索
楼主: happytc

[效率算法] 再给个简单点的问题:判断S3是否由S1和S2中的字符按原顺序组成

 火... [复制链接]
发表于 2011-12-9 10:02:55 | 显示全部楼层
学习一下,看看呗
发表于 2011-12-9 11:04:31 | 显示全部楼层
学习了,是什么东东
发表于 2011-12-9 15:25:55 | 显示全部楼层
来学习,C的那个看懂了,指针+递归感觉比较简单清晰
发表于 2011-12-9 18:11:55 | 显示全部楼层
回复 13# Duvet
發現是自己看錯了,確實是返回True,問了個蠢問題真抱歉
 楼主| 发表于 2011-12-9 18:35:31 | 显示全部楼层
回复  Duvet
發現是自己看錯了,確實是返回True,問了個蠢問題真抱歉
Duvet 发表于 2011-12-9 18:11



    呵,本来想用au3写个递归解决这个问题的
后来想了想,还是用C写出来代码简洁明了很多
发表于 2011-12-9 18:39:48 | 显示全部楼层
本帖最后由 Duvet 于 2011-12-9 18:41 编辑

回复 20# happytc
確實差很多,悠久的語言能廣乏流傳至今,是有存在的價值啊!

Main()
Exit
Func IsCombined($a, $b, $c)
        If (Stringlen($a) + Stringlen($b)) <> StringLen($c) Then Return SetError(0, 0, False)
        If StringLen($c) = 0 Then Return SetError(0, 0, True)
        If $a == "" Then Return SetError(0, 0, $b == $c)
        If $b == "" Then Return SetError(0, 0, $a == $c)
        If StringLeft($a, 1) == StringLeft($c, 1) Then
                If IsCombined(StringTrimLeft($a, 1), $b, StringTrimLeft($c, 1)) Then Return SetError(0, 0, True)
        EndIf
        If StringLeft($b, 1) == StringLeft($c, 1) Then
                If IsCombined($a, StringTrimLeft($b, 1), StringTrimLeft($c, 1)) Then Return SetError(0, 0, True)
        EndIf
        Return SetError(0, 0, False)
EndFunc

Func Main()
        Local $x = "black"
        Local $y = "board"
        Local $z1 = "blackboard"
        Local $z2 = "boblaarcdk"
        Local $z3 = "boabdrlack"
        MsgBox(0, 0, IsCombined($x, $y, $z1) & @CRLF & IsCombined($x, $y, $z2) & @CRLF & IsCombined($x, $y, $z3));
EndFunc

评分

参与人数 2金钱 +70 收起 理由
happytc + 20
afan + 50

查看全部评分

发表于 2011-12-9 18:56:40 | 显示全部楼层
想不出來,還是看看大俠的
 楼主| 发表于 2011-12-10 14:59:42 | 显示全部楼层
回复  happytc
確實差很多,悠久的語言能廣乏流傳至今,是有存在的價值啊!
Duvet 发表于 2011-12-9 18:39



    嗯,多谢了,我还说等我有心情有空了,把它翻成au3的呢。
发表于 2011-12-11 16:18:59 | 显示全部楼层
看下高人的解答!
发表于 2011-12-12 22:54:14 | 显示全部楼层
好像关于字符串的的帖子都能见到afan版主,

总是能学到东西

发表于 2011-12-14 09:37:21 | 显示全部楼层
来学习下了
发表于 2011-12-14 10:24:09 | 显示全部楼层
看答案 学习
发表于 2011-12-14 10:35:54 | 显示全部楼层
看看  我能想到的很麻烦
发表于 2011-12-14 10:36:10 | 显示全部楼层
回复 4# 3mile

如果$str3="blboardcka" ,你的程序还对吗?
发表于 2011-12-14 11:38:14 | 显示全部楼层
回复 29# kyniel
Local $str1="black",$str2="board"
Local $str3="blboardcka";"blackboard"
;~ Local $str3="blboardcka"
;~ 
$time=TimerInit()
$a=Compare($str1,$str2,$str3)
MsgBox(0,TimerDiff($time),$a)
 
Func Compare($s1,$s2,$s3)
        $arr1=StringRegExpReplace($s1,'.','(.*?)\0')
                $len1=@Extended
        $arr2=StringRegExpReplace($s2,'.','(.*?)\0')
        $len2=@Extended
        If StringRegExp($s3,$arr1,0) Then;And StringRegExp($s3,$arr2,0) Then
                        $flag=True
                        
                        Local $temp=""
                        For $i=1 To $len1
                                $temp&='$'&$i
                        Next
                        
                        $s3=StringRegExpReplace($s3,$arr1,$temp)
                        
                        If Not StringRegExp($s3,$arr2,0) Then $flag=False
                Else
                        $flag=False
                EndIf
                
                Return $flag
EndFunc


您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 18:53 , Processed in 0.082935 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表