9#include <unordered_map>
23 static std::vector<int>
kmpSearch(
const std::string &pat,
const std::string &txt) {
24 const int M =
static_cast<int>(pat.size());
25 const int N =
static_cast<int>(txt.size());
28 std::vector<int> lps(M);
29 std::vector<int> result;
36 if (pat[i] == pat[len]) {
54 if (pat[j] == txt[i]) {
60 result.push_back(i - j);
62 }
else if (i < N && pat[j] != txt[i]) {
82 const int n =
static_cast<int>(s.size());
83 for (
int i = 0; i < n / 2; i++) {
84 if (s[i] != s[n - 1 - i]) {
98 template<std::
integral T>
100 std::stringstream ss;
102 for (
size_t i = 0; i < vec.size(); ++i) {
104 if (i < vec.size() - 1) {
120 template<std::
integral T>
122 std::stringstream ss;
139 template<std::
integral T>
140 std::string
to_string(
const std::vector<std::pair<T, T> > &vec) {
141 std::stringstream ss;
143 for (
size_t i = 0; i < vec.size(); ++i) {
145 if (i < vec.size() - 1) {
162 static std::string
to_string(
const std::vector<std::string> &vec) {
163 std::stringstream ss;
165 for (
size_t i = 0; i < vec.size(); ++i) {
167 if (i < vec.size() - 1) {
183 template<std::
integral T>
184 std::string
to_string(
const std::vector<std::vector<T> > &vec) {
185 std::stringstream ss;
187 for (
size_t i = 0; i < vec.size(); ++i) {
189 if (i < vec.size() - 1) {
205 static std::vector<std::string>
string_split(
const std::string &s,
char delimiter) {
206 std::vector<std::string> tokens;
208 std::istringstream tokenStream(s);
209 while (std::getline(tokenStream, token, delimiter)) {
210 tokens.push_back(token);
227 if (n == 0)
return "";
228 if (n == 1)
return s;
229 if (s.empty())
return "";
232 result.reserve(n * s.size());
234 size_t current_length = s.size();
235 while (result.size() + current_length <= n * s.size()) {
240 result += result.substr(0, (n * s.size()) - result.size());
256 if (n == 0)
return "";
257 std::string result(n, c);
268 static std::string
string_join(
const std::vector<std::string> &strings,
const std::string &delimiter) {
269 if (strings.empty())
return "";
271 std::ostringstream result;
272 auto iter = strings.begin();
275 while (iter != strings.end()) {
276 result << delimiter << *iter++;
Definition big_integer.hpp:14
static std::string string_join(const std::vector< std::string > &strings, const std::string &delimiter)
Definition string_utils.hpp:268
static std::string string_repeat(const std::string &s, size_t n)
Definition string_utils.hpp:226
static bool isPalindrome(const std::string &s)
Definition string_utils.hpp:80
static std::vector< std::string > string_split(const std::string &s, char delimiter)
Definition string_utils.hpp:205
static std::vector< int > kmpSearch(const std::string &pat, const std::string &txt)
Definition string_utils.hpp:23
std::string to_string(const std::vector< T > &vec)
Definition string_utils.hpp:99