말 라 차 알고리즘
2714 단어 문자열
분석:
s,t
:s,t l, r
l==r,
l
:
1. : s
2.l==r,
3.l
Ac code:
#include
using namespace std;
typedef long long ll;
const int maxn=5e6+5;
int p[maxn];
ll ans;
char s[maxn];
char snew[maxn];
int init(){
int len=strlen(s),j=2;
snew[0]='$',snew[1]='#';
for(int i=0;ii)p[i]=min(p[2*id-i],mx-i);
else p[i]=1;
while(snew[i-p[i]]==snew[i+p[i]])///i-p[i] , string ,char[]
p[i]++;
if(mx=0;--i)
if(s1[i]!=s2[i])
{
r=i;
break;
}
if(l==r)
printf("0
");
else if(l>r){
strcpy(s,s1);
printf("%lld
",manacher());
}
else if(l=0&&j
마지막 으로 manacher 를 붙 여 가장 긴 답장 문자열 을 구 하 는 판 자 를 붙 입 니 다.
#include
#include
#include
using namespace std;
string Manacher(string s)
{
// Insert '#'
string t = "$#";
for (int i = 0; i < s.size(); ++i)
{
t += s[i];
t += "#";
}
// Process t
vector p(t.size(), 0);/// 2
int mx = 0, id = 0, resLen = 0, resCenter = 0;
for (int i = 1; i < t.size(); ++i) /// 1
{
p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;
while (t[i + p[i]] == t[i - p[i]]) ++p[i];
if (mx < i + p[i])
{
mx = i + p[i];
id = i;
}
if (resLen < p[i]) /// p[i]
{
resLen = p[i];///
resCenter = i;///
}
}
/// len=resLen - 1;
/// (resCenter - resLen) / 2
return s.substr((resCenter - resLen) / 2, resLen - 1);
}
int main()
{
int n;
cin>>n;
string k;
while(n--)
{
cin>>k;
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
비슷한 이름의 Attribute를 많이 만들어 삭제하는 Houdini사용 소프트웨어는 Houdini16.5입니다 배열에서는 애트리뷰트의 보간이 잘 동작하지 않는 것과 AttributeCreateSOP 노드에서 Size가 4를 넘는 애트리뷰트를 작성해도 값이 조작할 수 없어 의미가 없...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.