java字符串查找算法_java – 查找所有“字符相等”字符串的高效算法?
我们如何编写输出字符串“
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 – 查找所有“字符相等”字符串的高效算法?相关推荐
- 2021-12-27 Java String contains() 方法用于判断字符串中是否包含指定的字符或字符串。用.toLowerCase().contains忽视大小写。
一.public boolean contains(CharSequence chars) contains() 方法用于判断字符串中是否包含指定的字符或字符串. 二.返回值 如果包含指 ...
- R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串、str_which函数返回字符串向量中所有包含匹配字符的位置(索引)
R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串.str_which函数返回字符串向量中所有包含匹配字符的位置(索引) 目录
- java 字符串所在位置_java 查找字符串所在的位置
使用了 String 類的 indexOf() 方法在字符串中查找子字符串出現的位置,如過存在返回字符串出現的位置(第一位為0),如果不存在返回 -1.方便判斷和截取字符串! 語法:stringObj ...
- java如何获取手机号码_java中如何提取一个字符串中的电话号码?
展开全部 java中如何提取一个字符串中的电话号码e68a84e8a2ad3231313335323631343130323136353331333363376466,先写出手机号码和固定号码的正则表 ...
- java程序员基础算法_java程序员必知的十种程序算法
<java程序员必知的十种程序算法>由会员分享,可在线阅读,更多相关<java程序员必知的十种程序算法(11页珍藏版)>请在人人文库网上搜索. 1.java程序员必学的十种程序 ...
- java字符串去重复_Java 8新特性:字符串去重
本文首发与InfoQ. 8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新.支持在运行时通过API来修改MinHeapFreeRatio和MaxHe ...
- java printstream 中文乱码_JAVA的中文字符乱码问题
JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...
- java 字母 数字排序_java – 如何排序字母数字字符串
这是一个关于如何执行此操作(未特别优化)的自包含示例: final Pattern p = Pattern.compile("^\\d+"); String[] examples ...
- c语言字符串定界符,关于c ++:按字符分割字符串
我知道这是一个非常简单的问题,但我只想一次为自己解决 我只想使用字符作为分割定界符将字符串分割成数组. (很像C#著名的.Split()函数.我当然可以应用蛮力方法,但是我想知道是否有什么更好的方法了 ...
- c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数
strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...
最新文章
- 关于Eclipse平台的使用和开发第一个SWT程序
- JavaScript权威指南--window对象
- 计算机二级考试vb知识点,2016计算机二级《VB》考试重要知识点
- MFC控件随窗口大小变化原理及实现
- linux 无线网卡连接网络连接不上去,【已解决】Ubuntu 10.04 无线网卡 无法连接
- 图Graph--最小生成树
- RSocket协议初识
- 非导向传输媒体| 计算机网络
- Hadoop框架:HDFS高可用环境配置
- 开机出现GRUB error22的解决办法
- DEIGRP 的配置
- C#编程(二十五)----------接口
- 转:GCC,LLVM,Clang编译器对比
- c语言表达式运算符,C语言运算符与表达式
- 算法:匹配有效的括号20. Valid Parentheses
- 基于simulink的16QAM仿真模型
- 校园二手交易平台-简要需求分析
- 关于nubia z9 NX508J notification 不显示的问题
- 抖音上坤之大强之作是什么意思
- 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation
热门文章
- arm汇编指令集_汇编入门第一篇,小白也能看懂
- oracle 如何查询某张表 历史相关操作_你的项目应该如何正确分层?
- 局域网屏幕监控软件_如何用局域网桌面监控软件进行局域网电脑桌面监控?
- 【2015沈阳区域赛F=HDU5514】Frogs(圆上n个青蛙跳统计跳劲哪些点---欧拉函数求和+思维)
- mysql error 1017_[转载]解决 mysql ERROR 1017:Can t find file解决错误
- 在C++上利用onnxruntime (CUDA)和 opencv 部署模型onnx
- dat关闭某进程_电脑程序卡住怎么办?结束进程只需要这三个键
- 用计算机弹假面骑士build,假面骑士build使用的武器汇总,你知道几个?
- 算法:24.两两交换链表中的节点
- oracle安装出现乱码报错,oracle_oracle安装出现乱码等相关问题,安装oracle时候遇到错误 Preparing - phpStudy...