重复的模式。需要帮助理解提交的解决方案

Repeated pattern. Need help understanding a submitted solution

寻求帮助以理解其他人提交的解决方案。在我提交我的之后,我在leetcode上查看了其他人,看看其他人想出了什么样的解决方案。

我遇到了一个高效而简单的方法,但我很难理解它。

string checker = (s + s).Substring(1, 2 * s.Length - 2);
return checker.Contains(s);

我的理解是:检查器在 s+s 之间从索引 1 开始构建子字符串;

字符串方法Contain()在检查器中检查所述字符串; 但是,我可能对 Contain();

的基本性质感到困惑

案例:

1.abcabcabc

ex 1. checker = "bcabcabcabcabcabc"; s 检查 abcabcabc;第二个应该包含这个 since (s+s);这 returns 正确;

2.abababc

ex 2.checker = "bababcabababc";它不会包含“abababc”bababc/abababc吗? returns 错误;

Contain() 在 C# 中是如何工作的?优选ELI5;请谢谢!

子串长度是输入长度的两倍减2,所以最后一个字符也会被截断。如果输入完全由重复的“短语”组成,则附加自身将在连接结果的中间显示输入值。第一个和最后一个字符被截断以避免与串联中的原始输入值匹配

input => append input to input => truncate first and last char => result

ab => abab => ba => !contains(ab)
abc => abcabc => bcab => !contains(abc)
abab => abababab => bababa => contains(abab)
                     ^--^
abcabc => abcabcabcabc => bcabcabcab => contains(abcabc)
                            ^----^