本帖最后由 l1299587332 于 2021-8-19 22:32 编辑
算法可能有点不完善,但是够用。
先看效果:
代码:
取出最长公共子串(“不好啊你好啊好啊”,“好啊不吃饭吗”)
效果:
“好啊”
代码:
取出最大重复部分 (“12366666666666666123666”)
效果:
“6666666”
代码:
取出重复部分 (“12366666666666666123666”, tmp)
调试输出 (tmp)
效果:
数组:2{“6666666”,“123”}
代码:
取出重复部分2 (“12366666666666666123666”, tmp)
调试输出 (tmp)
效果:
数组:2{“6666666”,“123666”}
代码:
取出最大重复部分 (“你吃了吗吃了吗吃了吗吃了吧了吧了吧”)
效果:
“吃了吗吃了”
代码:
取出重复部分 (“你吃了吗吃了吗吃了吗吃了吧了吧了吧”, tmp)
调试输出 (tmp)
效果:
数组:1{“吃了吗吃了”}
代码:
取出任意重复部分 (“你吃了吗吃了吗吃了吗吃了吧了吧了吧”, tmp)
调试输出 (tmp)
效果:
数组:10{“吃了吗吃了”,“吃了吗吃”,“吃了吗”,“吃了”,“了吗吃了”,“了吗吃”,“了吗”,“吗吃了”,“吗吃”,“吃了”}
总共包含四个子函数
回复可见
取出最长公共子串 文本型 text1 文本型 text2 文本型
变量名 类 型 静态 数组 备 注 a 正则表达式类 aa 正则表达式类 str 整数型 1,1 i 整数型 ii 整数型 maxv 整数型 xmax 整数型 tmp 文本型
如果真 ( 取文本长度 ( text1
) = 0
或 取文本长度 ( text2
) = 0
) 返回 ( “” ) 如果真 ( 取文本长度 ( text1
) =
取文本长度 ( text2
) )
如果真 ( text1 = text2
) 返回 ( text1
) a.创建 ( “\S” , text1, , , , ) aa.
创建 ( “\S” , text2, , , ,
) 重定义数组 ( str, 假, a.
取匹配数量 ( ) + 1, aa.
取匹配数量 ( ) + 1
) 计次循环首 ( a.
取匹配数量 ( ) , i
) 计次循环首 ( aa.
取匹配数量 ( ) , ii
) 如果真 ( a.
取匹配文本 ( i,
) = aa.
取匹配文本 ( ii,
) )
str
[ i + 1
] [ ii + 1
] = str
[ i
] [ ii
] + 1
如果真 ( maxv < str
[ i + 1
] [ ii + 1
] ) maxv = str
[ i + 1
] [ ii + 1
] xmax = i + 1
计次循环尾 ( ) 计次循环尾 ( ) 如果 ( 取文本长度 ( 文本区分_只取汉字 ( text1, 真,
真 ) ) > 0
) 变量循环首 ( xmax - maxv + 1, xmax, 1, i
) tmp = tmp + a.
取匹配文本 ( i,
) 变量循环尾 ( ) tmp =
取文本中间 ( text1, xmax - maxv, maxv
) 返回 ( tmp
) 变量名 类 型 静态 数组 备 注 a 正则表达式类 i 整数型 max 整数型 box 文本型 0 tmp 文本型 bool 整数型
a.
创建 ( “\S” , text, , , ,
) 计次循环首 ( a.
取匹配数量 ( ) , i
) 加入成员 ( box, a.
取匹配文本 ( i,
) )
计次循环尾 ( ) 计次循环首 ( a.
取匹配数量 ( ) , i
) max =
取整 ( ( a.
取匹配数量 ( ) - i + 1
) ÷ 2
) 如果真 ( max = 0
) 跳出循环 ( ) bool = 寻找文本 ( 取文字部分 ( box, max + 1, a.取匹配数量 ( ) ), 取文字部分 ( box, i, max) , , 假 ) 判断循环首 ( bool = -1
且 max > i
) max = max - 1
bool =
寻找文本 ( 取文字部分 ( box, max + 1, a.
取匹配数量 ( ) ),
取文字部分 ( box, i, max
) , ,
假 ) 判断循环尾 ( ) 如果真 ( bool ≠ -1
) 如果真 ( 取文本长度 ( 取文字部分 ( box, i, max
) ) >
取文本长度 ( tmp
) )
tmp =
取文字部分 ( box, i, max
) 计次循环尾 ( ) 返回 ( tmp
) 变量名 类 型 静态 数组 备 注 a 正则表达式类 i 整数型 max 整数型 box 文本型 0 bool 整数型 tmw 文本型 tmp 文本型 0 len 整数型 0
a.
创建 ( “\S” , text, , , ,
) 计次循环首 ( a.
取匹配数量 ( ) , i
) 加入成员 ( box, a.
取匹配文本 ( i,
) )
计次循环尾 ( ) 计次循环首 ( a.
取匹配数量 ( ) , i
) max =
取整 ( ( a.
取匹配数量 ( ) - i + 1
) ÷ 2
) 如果真 ( max = 0
) 跳出循环 ( ) bool = 寻找文本 ( 取文字部分 ( box, max + 1, a.取匹配数量 ( ) ), 取文字部分 ( box, i, max) , , 假 ) 判断循环首 ( max > i
) tmw =
取文字部分 ( box, i, max
) 如果真 ( bool ≠ -1
且 tmw ≠
“” ) 加入成员 ( tmp, tmw
) 加入成员 ( len,
取文本长度 ( tmw
) )
max = max - 1 bool =
寻找文本 ( 取文字部分 ( box, max + 1, a.
取匹配数量 ( ) ),
取文字部分 ( box, i, max
) , ,
假 ) 判断循环尾 ( ) 计次循环尾 ( ) 冒泡排序_主次 ( tmp, len
) 判断 ( 取数组成员数 ( tmp
) = 1
) 加入成员 ( arr, tmp
[ 1
] ) 判断 ( 取数组成员数 ( tmp
) ≥ 1
) 加入成员 ( arr, tmp
[ 1
] ) tmw =
子文本替换 ( text, tmp
[ 1
] ,
“” , , ,
真 ) 变量循环首 ( 2,
取数组成员数 ( tmp
) , 1, i
) 如果真 ( 文本_取出现次数 ( tmw, tmp
[ i
] ,
) ≥ 2
) 加入成员 ( arr, tmp
[ i
] ) tmw =
子文本替换 ( tmw, tmp
[ i
] ,
“” , , ,
真 ) 变量循环尾 ( ) 变量名 类 型 静态 数组 备 注 a 正则表达式类 i 整数型 max 整数型 box 文本型 0 bool 整数型 tmw 文本型 tmp 文本型 0 len 整数型 0 j 整数型 flag 逻辑型
a.
创建 ( “\S” , text, , , ,
) 计次循环首 ( a.
取匹配数量 ( ) , i
) 加入成员 ( box, a.
取匹配文本 ( i,
) )
计次循环尾 ( ) 计次循环首 ( a.
取匹配数量 ( ) , i
) max =
取整 ( ( a.
取匹配数量 ( ) - i + 1
) ÷ 2
) 如果真 ( max = 0
) 跳出循环 ( ) bool = 寻找文本 ( 取文字部分 ( box, max + 1, a.取匹配数量 ( ) ), 取文字部分 ( box, i, max) , , 假 ) 判断循环首 ( max > i
) tmw =
取文字部分 ( box, i, max
) 如果真 ( bool ≠ -1
且 tmw ≠
“” ) 加入成员 ( tmp, tmw
) 加入成员 ( len,
取文本长度 ( tmw
) )
max = max - 1 bool =
寻找文本 ( 取文字部分 ( box, max + 1, a.
取匹配数量 ( ) ),
取文字部分 ( box, i, max
) , ,
假 ) 判断循环尾 ( ) 计次循环尾 ( ) 冒泡排序_主次 ( tmp, len
) 判断 ( 取数组成员数 ( tmp
) = 1
) 加入成员 ( arr, tmp
[ 1
] ) 判断 ( 取数组成员数 ( tmp
) ≥ 1
) 加入成员 ( arr, tmp
[ 1
] ) 变量循环首 ( 2,
取数组成员数 ( tmp
) , 1, i
) flag = 假
变量循环首 ( 1, i - 1, 1, j
) 如果真 ( 寻找文本 ( tmp
[ j
] , tmp
[ i
] , ,
假 ) = -1
) flag = 真
跳出循环 ( ) 变量循环尾 ( ) 如果真 ( flag =
假 ) 加入成员 ( arr, tmp
[ i
] ) 变量循环尾 ( ) 变量名 类 型 静态 数组 备 注 a 正则表达式类 i 整数型 max 整数型 box 文本型 0 bool 整数型 tmw 文本型 tmp 文本型 0 len 整数型 0
a.
创建 ( “\S” , text, , , ,
) 计次循环首 ( a.
取匹配数量 ( ) , i
) 加入成员 ( box, a.
取匹配文本 ( i,
) )
计次循环尾 ( ) 计次循环首 ( a.
取匹配数量 ( ) , i
) max =
取整 ( ( a.
取匹配数量 ( ) - i + 1
) ÷ 2
) 如果真 ( max = 0
) 跳出循环 ( ) bool = 寻找文本 ( 取文字部分 ( box, max + 1, a.取匹配数量 ( ) ), 取文字部分 ( box, i, max) , , 假 ) 判断循环首 ( max > i
) tmw =
取文字部分 ( box, i, max
) 如果真 ( bool ≠ -1
且 tmw ≠
“” ) 加入成员 ( arr, tmw
) max = max - 1
bool =
寻找文本 ( 取文字部分 ( box, max + 1, a.
取匹配数量 ( ) ),
取文字部分 ( box, i, max
) , ,
假 ) 判断循环尾 ( ) 计次循环尾 ( ) 变量名 类 型 静态 数组 备 注 i 整数型 j 整数型 temp 整数型 tempw 文本型
计次循环首 ( 取数组成员数 ( value
) , i
) 计次循环首 ( 取数组成员数 ( value
) - i, j
) 如果真 ( value
[ j
] < value
[ j + 1
] ) temp = value
[ j
] value
[ j
] = value
[ j + 1
] value
[ j + 1
] = temp
tempw = name
[ j
] name
[ j
] = name
[ j + 1
] name
[ j + 1
] = tempw
计次循环尾 ( ) 计次循环尾 ( ) 取文字部分 文本型 文本 文本型 开始位置 整数型 结束位置 整数型
如果真 ( 开始位置 = 0
或 结束位置 = 0
) 返回 ( “” ) 如果真 ( 结束位置 >
取数组成员数 ( 文本
) 或 开始位置 >
取数组成员数 ( 文本
) )
返回 ( “” ) 变量循环首 ( 开始位置, 结束位置, 1, i
) tmp = tmp + 文本
[ i
] 变量循环尾 ( ) 返回 ( tmp
)
补充内容 (2021-8-21 22:07):
最长公共子串有问题,修复的代码在20楼