afan 发表于 2012-3-29 23:45 http://www.autoitx.com/images/common/back.gif
嗯,的确是这样,所以楼主这个问题并不是很好的一个可以深入讨论的问题
可能他自己也没有深入想过吧,可以稍稍改一下,变成:
“删除字符串里的重复字符”就有意思多了 本帖最后由 user3000 于 2012-3-30 09:32 编辑
无聊的产物, 只是跟正则沾点边, 其实用 StringInStr 更好吧.
原来的代码还有点错误,现在已修正.#include <array.au3>
Local $a = "anbancjffsanvdaf"
$a = "manbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahff"
;$a="manbanc12aaa3123jffsanadzwdanxsedffdffdffdffdffdffvdaf"
$array = _Get_Max_Substring($a)
_ArrayDisplay($array)
Func _Get_Max_Substring($str, $sLen = 2)
Local $r =
Local $len = StringLen($str)
Local $offset, $count
For $i = 1 To $len - $sLen + 1
$subStr = StringMid($str, $i, $sLen)
$count = 1
$offset = 1
While 1
StringRegExp($str, $subStr, 1, $offset)
If @error = 0 Then
$offset = @extended
$count += 1
Else
ExitLoop
EndIf
WEnd
If $count > $r Then
$r = $count
$r = $subStr
EndIf
Next
Return $r
EndFunc ;==>_Get_Max_Substring 本帖最后由 happytc 于 2012-3-30 09:42 编辑
无聊的产物, 只是跟正则沾点边, 其实用 StringInStr 更好吧.
原来的代码还有点错误,现在已修正.
user3000 发表于 2012-3-30 09:18 http://www.autoitx.com/images/common/back.gif
效率有点低
我把你的Code中的字符串增加了拷贝了20次,计算时间就比较长了,我的机子上花了10秒
#include <array.au3>
Local $hInit = TimerInit()
Local $a ="manbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahff"
;$a="manbanc12aaa3123jffsanadzwdanxsedffdffdffdffdffdffvdaf"
$array = _Get_Max_Substring($a)
Local $iDiff = TimerDiff($hInit)
MsgBox(0, 0, $iDiff)
_ArrayDisplay($array)
Func _Get_Max_Substring($str, $sLen = 2)
Local $r =
Local $len = StringLen($str)
Local $offset, $count
For $i = 1 To $len - $sLen + 1
$subStr = StringMid($str, $i, $sLen)
$count = 1
$offset = 1
While 1
StringRegExp($str, $subStr, 1, $offset)
If @error = 0 Then
$offset = @extended
$count += 1
Else
ExitLoop
EndIf
WEnd
If $count > $r Then
$r = $count
$r = $subStr
EndIf
Next
Return $r
EndFunc ;==>_Get_Max_Substring
感谢大家热心的帮忙,问题搞定了。。。
解决方法1,在网上下了一个分词字典,大概28W个单词,但是auto的速度,你们懂的。。
解决方法2,后台调用这个http://www.ftphp.com/scws/demo/pscws23/demo.php
我觉得正则应该可以实现的,虽然心有不甘,但是苦于能力有限,呵呵,这里抛砖引玉,希望大家都能有所收获。 对你的28W个单词的词典很有兴趣,能否上传下.
中文分词的话个人感觉ICTCLAS不错. 效率有点低
我把你的Code中的字符串增加了拷贝了20次,计算时间就比较长了,我的机子上花了10秒
happytc 发表于 2012-3-30 09:41 http://www.autoitx.com/images/common/back.gif
我的正则与AU3一样都是入门级的,效率啥的很多时候根本就是没做考虑.
或是根本做不到高效率哦. 回复 20# 3mile
好玩的问题,难度很大.
只用正则搞不定.
以下代码只为抛个烂砖头,希望能引来好玉.
#include <Array.au3>
Local $Str = ''
$Str &= 'manbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
$Str &= 'a3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahffmanbanc12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3123jffsanadzwdanxsedffdffdffdffdffdffvdahff'
Local $Test = StringRegExp($str, '(.{2})(?=[^\1]*\1)', 3)
_ArraySort($Test)
Local $Temp_Array
For $i=0 To UBound($Test)-1
$Temp_Array[$i]=$Test[$i]
$Temp_Array[$i]=1
Next
For $i=0 To UBound($Test)-2
If $Temp_Array[$i]==$Temp_Array[$i+1] Then
$Temp_Array[$i]=''
$Temp_Array[$i+1]=$Temp_Array[$i]+1
EndIf
Next
_ArraySort($Temp_Array,1,0,0,1)
_ArrayDisplay($Temp_Array)
$output=StringRegExpReplace($str,$Temp_Array,'')
MsgBox(0,0,"出现最多的:"&$Temp_Array&@CRLF&"次数:"&@extended)
页:
1
[2]