一,题目
给一串很长字符串,要求找到符合要求的字符串,例如目的串:123
例如:1******3***2 ,12*****3这些都要找出来
生活中,比如输入:法你轮和功 会被和谐的
二,分析:
自然匹配就是对待匹配的每个字符挨个匹配,设你的待匹配字串长度位n,模式字符串长度位m。对于待匹配字符串中的任意一个字符最坏情况下要匹配m次,也就是说这个字符不在模式字符串中。所以最坏情况下总共是m*n此匹配,时间复杂度就是O(m*n)
倘若使用hash表对待字符串进行hash处理O(n)的时间复杂度,那么对于模式字符串中的任意字符,仅需一次hash判断就可以得知是否在待匹配字符串中出现。最坏仅需m次就可以得到结果。时间复杂度为O(m)或者O(n);
与此题相类似:就是给一个很长的字符串str还有一个字符集比如{a,b,c}找出str里包含{a,b,c}的最短子串。要求O(n)?比如,字符集是a,b,c,字符串是abdcaabcx,则最短子串为abc。
用两个变量front rear指向一个的子串区间的头和尾,用一个intcnt[255]={0}记录当前这个子串里字符集a,b,c各自的个数,一个变量sum记录字符集里有多少个了rear一直加,更新cnt[]和sum的值,直到
sum等于字符集个数然后front++,直到cnt[]里某个字符个数为0,这样就找到一个符合条件的字串了继续前面的操作,就可以找到最短的了。
鉴于此题的解答,我给出的答案是,利用哈希表(散列表)即根据关键码值(Key value)而直接进行访问的数据结构。下面源码是给出的基于ASCII码表的和谐过程。如果是汉字的,将会更复杂些。这里没有给出。不过,思路类似。
三,源码
附表:
ASCII值
|
控制字符
|
ASCII值
|
控制字符
|
ASCII值
|
控制字符
|
ASCII值
|
控制字符
|
0
|
NUT
|
32
|
(space)
|
64
|
@
|
96
|
、
|
1
|
SOH
|
33
|
!
|
65
|
A
|
97
|
a
|
2
|
STX
|
34
|
”
|
66
|
B
|
98
|
b
|
3
|
ETX
|
35
|
#
|
67
|
C
|
99
|
c
|
4
|
EOT
|
36
|
$
|
68
|
D
|
100
|
d
|
5
|
ENQ
|
37
|
%
|
69
|
E
|
101
|
e
|
6
|
ACK
|
38
|
&
|
70
|
F
|
102
|
f
|
7
|
BEL
|
39
|
,
|
71
|
G
|
103
|
g
|
8
|
BS
|
40
|
(
|
72
|
H
|
104
|
h
|
9
|
HT
|
41
|
)
|
73
|
I
|
105
|
i
|
10
|
LF
|
42
|
*
|
74
|
J
|
106
|
j
|
11
|
VT
|
43
|
+
|
75
|
K
|
107
|
k
|
12
|
FF
|
44
|
,
|
76
|
L
|
108
|
l
|
13
|
CR
|
45
|
-
|
77
|
M
|
109
|
m
|
14
|
SO
|
46
|
.
|
78
|
N
|
110
|
n
|
15
|
SI
|
47
|
/
|
79
|
O
|
111
|
o
|
16
|
DLE
|
48
|
0
|
80
|
P
|
112
|
p
|
17
|
DCI
|
49
|
1
|
81
|
Q
|
113
|
q
|
18
|
DC2
|
50
|
2
|
82
|
R
|
114
|
r
|
19
|
DC3
|
51
|
3
|
83
|
X
|
115
|
s
|
20
|
DC4
|
52
|
4
|
84
|
T
|
116
|
t
|
21
|
NAK
|
53
|
5
|
85
|
U
|
117
|
u
|
22
|
SYN
|
54
|
6
|
86
|
V
|
118
|
v
|
23
|
TB
|
55
|
7
|
87
|
W
|
119
|
w
|
24
|
CAN
|
56
|
8
|
88
|
X
|
120
|
x
|
25
|
EM
|
57
|
9
|
89
|
Y
|
121
|
y
|
26
|
SUB
|
58
|
:
|
90
|
Z
|
122
|
z
|
27
|
ESC
|
59
|
;
|
91
|
[
|
123
|
{
|
28
|
FS
|
60
|
<
|
92
|
/
|
124
|
|
|
29
|
GS
|
61
|
=
|
93
|
]
|
125
|
}
|
30
|
RS
|
62
|
>
|
94
|
^
|
126
|
~
|
31
|
US
|
63
|
?
|
95
|
—
|
127
|
DEL
|
NUL 空
|
VT 垂直制表
|
SYN 空转同步
|
SOH 标题开始
|
FF 走纸控制
|
ETB 信息组传送结束
|
STX 正文开始
|
CR 回车
|
CAN 作废
|
ETX 正文结束
|
SO 移位输出
|
EM 纸尽
|
EOY 传输结束
|
SI 移位输入
|
SUB 换置
|
ENQ 询问字符
|
DLE 空格
|
ESC 换码
|
ACK 承认
|
DC1 设备控制1
|
FS 文字分隔符
|
BEL 报警
|
DC2 设备控制2
|
GS 组分隔符
|
BS 退一格
|
DC3 设备控制3
|
RS 记录分隔符
|
HT 横向列表
|
DC4 设备控制4
|
US 单元分隔符
|
LF 换行
|
NAK 否定
|
DEL 删除
|
分享到:
相关推荐
【汇编语言字符匹配原理】 在微机编程中,字符匹配是一个常见的任务,尤其是在8086汇编语言环境中。本实验旨在实现一个无串操作指令的字符串匹配算法,这要求我们利用基本的算术和逻辑操作来完成。以下是根据题目...
在IT领域,字符串字符匹配是编程中常见的一个问题,尤其在面试和在线评测系统(如华为OD)中,这种问题经常出现。本题库主要聚焦于这个主题,旨在帮助你提升解决此类问题的能力。华为OD题库中的练习题通常涵盖了算法...
面试题练习题前端 JavaScript高级语法-字符串属性面试题练习题前端 JavaScript高级语法-字符串属性面试题练习题前端 JavaScript高级语法-字符串属性面试题练习题前端 JavaScript高级语法-字符串属性面试题练习题前端...
中文匹配C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 C#中文文本匹配,字符串匹配,中文词语匹配,计算多个句子相似度 C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 C#中文文本...
在IT领域,字符串匹配是计算机科学中的...总之,带通配符的字符串匹配算法是一种实用的技术,它结合了字符串处理和模式识别的精华,广泛应用于各种软件系统中。理解和掌握这种算法能够提升你在文本处理领域的专业能力。
基于Matlab字符匹配技术的先进车牌识别系统:融合计算机视觉与数字图像处理的优化方案,基于Matlab字符匹配技术的先进车牌识别系统:融合计算机视觉与数字图像处理的优化实践,基于matlab字符匹配的车牌识别系统 ...
在本实验中,我们将深入探讨“微机软件实验2-字符匹配实验”。这个实验的核心目标是实现字符匹配算法,这是计算机科学中一个基础且重要的概念,尤其在文本处理、搜索和模式识别等领域有着广泛的应用。实验提供的代码...
### KMP字符串匹配算法 #### 一、简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串搜索算法,由Donald Knuth、James H. Morris和Vaughan Pratt三位计算机科学家共同提出。该算法的主要优点在于它能够有效地...
2. **并行字符串匹配**:在CUDA中实现字符串匹配,关键在于如何有效地分布数据和任务。通常,可以将目标字符串和模式字符串分布在GPU的不同线程块和线程中,每个线程负责一部分匹配工作。例如,在KMP算法中,每个...
Python 实现字符串模糊匹配 Python 是一种流行的编程语言,具有强大的字符串处理能力。字符串模糊匹配是字符串处理中的一种重要技术,用于解决字符串之间的相似度计算问题。在本文中,我们将介绍 Python 实现字符串...
本文将深入探讨一个基于汇编语言的字符串匹配程序,旨在理解其工作原理及其背后的逻辑。 #### 程序结构概述 程序主要分为数据段(`DATA`)、栈段(`STACKS`)以及代码段(`CODES`)。其中数据段存储了程序运行所需...
基于Matlab字符匹配技术的先进车牌识别系统:高效、准确且具备丰富功能的视觉识别解决方案,基于matlab字符匹配的车牌识别系统 【车牌识别】基于计算机视觉,数字图像处理,模板匹配算法(含GUI界面) 系统内数据库...
例如,当模式串的第二个字符与文本串的第二个字符不匹配时,由于部分匹配表告诉我们模式串的前两个字符没有公共前缀,所以模式串指针回到开头,而文本串指针不动。 在C++中实现KMP算法,我们需要创建两个指针分别...
如果不匹配,则移动文本指针到下一个位置,模式指针回溯到第一个字符,然后重新开始比较。 4. **优化策略**:为了提高效率,可以使用更高级的算法,如Boyer-Moore算法或KMP算法。Boyer-Moore算法利用了坏字符规则...
总的来说,"mubanpipei.zip"提供了一个用MATLAB实现的字符模板自动匹配系统,该系统能够有效地识别和匹配不同场景下的字符。通过理解上述知识点,开发者可以深入研究并应用此技术到更广泛的图像处理和识别项目中。...
基于MATLAB模板匹配法的车牌识别系统:图像预处理与字符匹配的完整流程模型,基于MATLAB模板匹配法的车牌识别系统:从灰度化到字符匹配的完整流程,模型已调试成功可运行,基于MATLAB,使用模板匹配法实现车牌的识别。...
### 柔性字符串匹配的基本原理 柔性字符串匹配允许一定程度的“误差”,即即使模式与主字符串不完全一致,只要它们之间的差异在可接受范围内,也可以认为是匹配成功的。这种差异可以通过不同的度量标准来定义,例如...
### JavaScript中的正则表达式应用详解...本文系统性地介绍了JavaScript中正则表达式的使用方法及其在字符串模式匹配中的应用场景。通过理解这些基本概念和实例,读者可以更好地利用正则表达式来解决实际开发中的问题。
库卡机器人高级字符串处理指令文档 库卡机器人高级字符串处理指令文档是一份详细的指令文档,旨在提供给库卡机器人用户和开发者,用于了解和掌握高级字符串处理指令的使用方法和技术细节。该文档涵盖了CREAD/CWRITE...
2. 循环:通过循环,逐个取出文本字符串中的字符,与模式字符串的第一个字符进行比较。 3. 比较:使用CMP指令比较两个字符,如果相等,则继续比较下一个字符,否则,根据是否到达文本字符串末尾,决定是否重新从文本...