Prefix 意味 前に置くもの、接頭辞、敬称、
Suffix 末尾に転化したもの、接尾辞、添え字、拡張子
A - Prefix and Suffix
提出AC
Submission #8511255 - AtCoder Grand Contest 006
int main() { cout <<setprecision(10); ll n ; string s , t; cin >> n >> s >> t; int additional = n; int j = 0 ; for(int i = 0 ; i < n ; i ++){ if(s[i] == t[j]){ additional --; j++; }else{ additional = n; j = 0; if(s[i] == t[j]){ additional--; j++; } } } cout << n + additional << endl; }
解法
やっていることは、sの前から順に、tの文字列と同じになっているものが何文字あるか、みたいなのを数えていった。
最小でも答えはn、でそれにn - 被ってる数 みたいな
s,tのサイズが同じだから添え字もエラーになることはないと思う。
(s,tの長さが違うとき、s[i](iはs.size()以上)をやったら、勝手に' 'とする。みたいなことをするんですかね?知らないけど)
汚いコードですね
そして何やってるかもよく分からん
次
良さげな解き方
int main() { cout <<setprecision(10); int n , i ; string s ,t ; cin >> n >> s >> t; for(i = 0 ; i < n ; i++){ if(s.substr(i,n-i)==t.substr(0,n-i)){ break; } } cout << n + i << endl; }
綺麗な解法
結局は、sの後ろの方が、tの前のほうと何文字被っているのかが大事
sについては後ろ側からn-i文字
tについては前からn-i文字を見る
(解説っぽい解答?)