Newer
Older
/*
* BorderArray.cpp
*
* Created on: 1. 11. 2014
* Author: Tomas Pecka
*/
#include "BorderArray.h"
#include <container/ObjectsVector.h>
#include <container/ObjectsPair.h>
#include <string/String.h>
#include <primitive/Integer.h>
#include <string/LinearString.h>
namespace stringology {
namespace exact {
std::vector<unsigned> BorderArray::construct(const string::String& string) {
}
std::vector<unsigned> BorderArray::construct(const string::LinearString& string) {
const auto& w = string.getContent();
std::vector<unsigned> res(w.size() + 1);
res[0] = 0;
res[1] = 0;
for(size_t i = 1; i < w.size(); i++) {
unsigned b = res[i];
while (b > 0 && w[i + 1 - 1] != w[b + 1 - 1])
b = res[b];
if(w[i + 1 - 1] == w[b + 1 - 1])
res[i + 1] = b + 1;
else
res[i + 1] = 0;
}
return res;
}
auto BorderArrayLinearString = BorderArray::RegistratorWrapper<std::vector<unsigned>, string::LinearString>(BorderArray::construct);
} /* namespace exact */
} /* namespace stringology */