假装自己定义了SString类型
class SString
{
public:
SString(string s)
{
string tmp = "0";
tmp.append(s);
this->s = tmp;
}
const char & operator [] (int i) const
{
return s[i];
}
int length()
{
return s.length()-1;
}
private:
string s;
};
BF算法
教材SString
int Index_brute_force_from_one(SString s, SString t, int pos)
{
int i = pos;
int j = 1;
while (i <= s.length() && j <= t.length())
{
if (s[i] == t[j])
{
i++;
j++;
}
else
{
i = i - j + 2;
j = 1;
}
}
if (j == t.length()+1)
return i - j + 1;
else
return 0;
}
std::string
int Index_brute_force_from_zero(string s,string t,int pos)
{
int i = pos;
int j = 0;
while (i<s.length()&&j<t.length())
{
if (s[i] == t[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j == t.length())
return i-j;
else
return -1;
}
KMP算法
教材SString
求next
普通版
void get_next_from_one(SString t, int next[])
{
int j = 0;
int i = 1;
next[1] = 0;
while (i < t.length())
{
if (j == 0 || t[j] == t[i])
{
i++;
j++;