我们如何编写输出字符串“

homoglyph equivalents”的高效函数?

例1(伪代码):

homoglyphs_list = [

["o", "0"], // "o" and "0" are homoglyphs

["i", "l", "1"] // "i" and "l" and "1" are homoglyphs

]

input_string = "someinput"

output = [

"someinput", "s0meinput", "somelnput",

"s0melnput", "some1nput", "s0me1nput"

]

例2:

homoglyphs_list = [

["rn", "m", "nn"],

]

input_string = "rnn"

output = ["rnn", "rm", "mn", "rrn", "nnn", "nm", "nrn"]

例3:

homoglyphs_list = [

["d", "ci", "a"], // "o" and "0" are homoglyphs

["i", "l", "1"] // "i" and "l" and "1" are homoglyphs

]

/*

notice that with the two rules above,

we can infer "d" = "ci" = "a" = "cl" = "c1"

*/

input_string = "pacerier"

output = [

"pacerier", "pacerler", "pacer1er", "pcicerier",

"pcicerler", "pcicer1er", "pclcerier", "pc1cerier",

"pclcerler", "pc1cerler", "pclcer1er", "pc1cer1er",

"pdcerier", "pdcerler", "pdcer1er"

]

注意:输出数组中成员的顺序并不重要,我们可以假设给定的单纯形映射被认为是正确的(输入不会给我们一个“无限循环”).

我当前的算法有效,但它使用原始强制执行并且性能很糟糕.例如.带有同形字符[“rn”,“m”,“nn”]的“mmmmm”输入需要38秒才能运行:

// This is php code (non-pseudo just so we could test the running time),

// but the question remains language-agnostic

public function Func($in, Array $mappings){

$out_table = array();

$out_table[$in] = null;

while(true){

$number_of_entries_so_far = count($out_table);

foreach(array_keys($out_table) as $key){

foreach($mappings as $mapping){

foreach($mapping as $value){

for($a=0, $aa=strlen($key); $a

$pos = strpos($key, $value, $a);

if($pos === false){

continue;

}

foreach($mapping as $equal_value){

if($value === $equal_value){

continue;

}

$out_table[substr($key, 0, $pos) . $equal_value . substr($key, $pos + strlen($value))] = null;

}

}

}

}

}

if($number_of_entries_so_far === count($out_table)){

// it means we have tried bruteforcing but added no additional entries,

// so we can quit now

break;

}

}

return array_keys($out_table);

}

我们如何实现高效(快速)同形文字扩展算法?

java字符串查找算法_java – 查找所有“字符相等”字符串的高效算法?相关推荐

  1. 2021-12-27 Java String contains() 方法用于判断字符串中是否包含指定的字符或字符串。用.toLowerCase().contains忽视大小写。

    一.public boolean contains(CharSequence chars) contains() 方法用于判断字符串中是否包含指定的字符或字符串. 二.返回值        如果包含指 ...

  2. R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串、str_which函数返回字符串向量中所有包含匹配字符的位置(索引)

    R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串.str_which函数返回字符串向量中所有包含匹配字符的位置(索引) 目录

  3. java 字符串所在位置_java 查找字符串所在的位置

    使用了 String 類的 indexOf() 方法在字符串中查找子字符串出現的位置,如過存在返回字符串出現的位置(第一位為0),如果不存在返回 -1.方便判斷和截取字符串! 語法:stringObj ...

  4. java如何获取手机号码_java中如何提取一个字符串中的电话号码?

    展开全部 java中如何提取一个字符串中的电话号码e68a84e8a2ad3231313335323631343130323136353331333363376466,先写出手机号码和固定号码的正则表 ...

  5. java程序员基础算法_java程序员必知的十种程序算法

    <java程序员必知的十种程序算法>由会员分享,可在线阅读,更多相关<java程序员必知的十种程序算法(11页珍藏版)>请在人人文库网上搜索. 1.java程序员必学的十种程序 ...

  6. java字符串去重复_Java 8新特性:字符串去重

    本文首发与InfoQ. 8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新.支持在运行时通过API来修改MinHeapFreeRatio和MaxHe ...

  7. java printstream 中文乱码_JAVA的中文字符乱码问题

    JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...

  8. java 字母 数字排序_java – 如何排序字母数字字符串

    这是一个关于如何执行此操作(未特别优化)的自包含示例: final Pattern p = Pattern.compile("^\\d+"); String[] examples ...

  9. c语言字符串定界符,关于c ++:按字符分割字符串

    我知道这是一个非常简单的问题,但我只想一次为自己解决 我只想使用字符作为分割定界符将字符串分割成数组. (很像C#著名的.Split()函数.我当然可以应用蛮力方法,但是我想知道是否有什么更好的方法了 ...

  10. c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

最新文章

  1. 关于Eclipse平台的使用和开发第一个SWT程序
  2. JavaScript权威指南--window对象
  3. 计算机二级考试vb知识点,2016计算机二级《VB》考试重要知识点
  4. MFC控件随窗口大小变化原理及实现
  5. linux 无线网卡连接网络连接不上去,【已解决】Ubuntu 10.04 无线网卡 无法连接
  6. 图Graph--最小生成树
  7. RSocket协议初识
  8. 非导向传输媒体| 计算机网络
  9. Hadoop框架:HDFS高可用环境配置
  10. 开机出现GRUB error22的解决办法
  11. DEIGRP 的配置
  12. C#编程(二十五)----------接口
  13. 转:GCC,LLVM,Clang编译器对比
  14. c语言表达式运算符,C语言运算符与表达式
  15. 算法:匹配有效的括号20. Valid Parentheses
  16. 基于simulink的16QAM仿真模型
  17. 校园二手交易平台-简要需求分析
  18. 关于nubia z9 NX508J notification 不显示的问题
  19. 抖音上坤之大强之作是什么意思
  20. 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation

热门文章

  1. arm汇编指令集_汇编入门第一篇,小白也能看懂
  2. oracle 如何查询某张表 历史相关操作_你的项目应该如何正确分层?
  3. 局域网屏幕监控软件_如何用局域网桌面监控软件进行局域网电脑桌面监控?
  4. 【2015沈阳区域赛F=HDU5514】Frogs(圆上n个青蛙跳统计跳劲哪些点---欧拉函数求和+思维)
  5. mysql error 1017_[转载]解决 mysql ERROR 1017:Can t find file解决错误
  6. 在C++上利用onnxruntime (CUDA)和 opencv 部署模型onnx
  7. dat关闭某进程_电脑程序卡住怎么办?结束进程只需要这三个键
  8. 用计算机弹假面骑士build,假面骑士build使用的武器汇总,你知道几个?
  9. 算法:24.两两交换链表中的节点
  10. oracle安装出现乱码报错,oracle_oracle安装出现乱码等相关问题,安装oracle时候遇到错误 Preparing - phpStudy...