virtual int match_imp(const string& s, const string& pattern) override final { gen_next(pattern); int i = 0; int j = 0; while(i < s.size() && j < int(pattern.size())) { if (j == -1 || s[i] == pattern[j]) { // 从s的下一个字符进行匹配 // 若-1==j, 则相当于从s[i+1], p[0]重新进行匹配 // 若-1!=j, 则相当于此次匹配成功, 继续进行下一个字符的匹配 ++i; ++j; } else { // 匹配失败, 向右滑动模式串 j = m_next[j]; } } if (j == pattern.size()) { return i - j; } else { return -1; } };
ChessMove chess_move_generator_next(ChessMoveGenerator* generator) { ChessMove move = 0; while ((move = gen_next(generator)) && !move_is_legal(generator->position, move)) ; return move; }
vector<int> test_gen_next(const string& pattern) { if (!pattern.empty()) { gen_next(pattern); } return m_next; }
int main(void){ while(scanf("%s", str) != EOF){ if (strcmp(str, ".") == 0){ break; } printf("%d\n", gen_next()); memset(str, 0, sizeof(str)); } }