problemscpp
A collection of my answers to algorithm problems in c++.
函数
acwing::acwing831_408 命名空间参考

  1. KMP字符串
更多...

函数

vector< int > get_next (string p)
 
int main (istream &cin, ostream &cout)
 
 TEST (acwing831_408, case1)
 

详细描述

  1. KMP字符串

函数说明

◆ get_next()

vector< int > acwing::acwing831_408::get_next ( string  p)

在文件 acwing408.cpp589 行定义.

589 {
590 vector<int> next(p.size(), 0);
591 for(int i = 1, j = 0; i < p.size(); i++) {
592 while(j && p[i] != p[j])
593 j = next[j - 1];
594 if(p[i] == p[j])
595 j++;
596 next[i] = j;
597 }
598 return next;
599 }

被这些函数引用 main().

◆ main()

int acwing::acwing831_408::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing408.cpp601 行定义.

601 {
602 int n, m;
603 string p, s;
604 cin >> n >> p >> m >> s;
605 vector<int> next = get_next(p);
606 for(int i = 0, j = 0; i < m; i++) {
607 while(j && s[i] != p[j])
608 j = next[j - 1];
609 if(s[i] == p[j])
610 j++;
611 if(j == n) {
612 cout << i - n + 1 << ' ';
613 j = next[j - 1];
614 }
615 }
616 return 0;
617 }
vector< int > get_next(string p)
Definition: acwing408.cpp:589

引用了 get_next().

被这些函数引用 TEST().

◆ TEST()

acwing::acwing831_408::TEST ( acwing831_408  ,
case1   
)

在文件 acwing408_test.cpp1081 行定义.

1081 {
1082 istringstream in("3\n"
1083 "aba\n"
1084 "5\n"
1085 "ababa");
1086 auto out = ostringstream();
1087 main(in, out);
1088 const auto ans = out.str();
1089 ASSERT_EQ("0 2 ",
1090 ans);
1091 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().