Skip to content

Commit 116a68c

Browse files
committed
Chapter32 fix
1 parent 9addfc5 commit 116a68c

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

Introduction to Algorithms Projects/Intorduction to Algorithms/string_match.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//////////////////////////////////////////////////////////////////////////
22
/// @file string_match.cpp
3-
/// @brief 字符串的几种匹配算法
3+
/// @brief 字符串匹配算法
44
/// @details COPYRIGHT NOTICE
55
/// Copyright (c) 2011
66
/// All rights reserved.\n
@@ -91,7 +91,7 @@ namespace ita
9191
//step 1: get pi array
9292
vector<int> pi(p.size(), 0);
9393

94-
for (int i = 2; i < p.size(); ++i){
94+
for (int i = 1; i < p.size(); ++i){
9595
for (int j = i - 1; j >= 0; --j){
9696
if (p.substr(0, j + 1) == p.substr(i - j, j + 1)){
9797
pi[i] = j + 1;
@@ -103,10 +103,8 @@ namespace ita
103103
//step 2: match
104104
for (int i = 0; i <= text.size() - p.size(); ){
105105
int j = 0;
106-
for (; j < p.size(); ++j){
107-
if (text[i + j] != p[j]){
108-
break;
109-
}
106+
while (j < p.size() && text[i + j] == p[j]){
107+
++j;
110108
}
111109

112110
if (j >= p.size()){ //matched:匹配成功
@@ -116,7 +114,7 @@ namespace ita
116114
++i;
117115
}
118116
else{
119-
i += (j - pi[j - 1]); //skip:尽量跳跃,公式为j-1+1 - pi[j-1] = j-pi[j-1]
117+
i += (j - pi[j - 1]); //skip:尽量右移,公式为j-1+1 - pi[j-1] = j-pi[j-1]
120118
}
121119
}
122120

@@ -136,6 +134,7 @@ namespace ita
136134

137135
bool b1 = (KMPMatch(text, pattern) != -1);
138136
bool b2 = (matcher.Match(text) != -1);
137+
139138
if (b1 != b2){
140139
cout << "两种方法结果不同!!! : " << text << endl;
141140
}
@@ -150,8 +149,11 @@ namespace ita
150149
cout << "至少一种方法未匹配成功 : " << text << endl;
151150
}
152151
}
153-
154-
152+
else{
153+
if (b1 || b2){
154+
cout << "不包含 'abc' 的串被某种方法误匹配:" << text << endl;
155+
}
156+
}
155157
}
156158

157159
return 0;

0 commit comments

Comments
 (0)