【问题标题】:Repeated pattern. Need help understanding a submitted solution [closed]重复的图案。需要帮助了解提交的解决方案[关闭]
【发布时间】:2022-01-24 18:04:10
【问题描述】:

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

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

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

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

字符串方法Contain()在检查器中检查所述字符串; 但是,我可能对Contain() 的基本性质感到困惑;

示例案例:

1.abcabcabc

ex 1. checker = "bcabcabcabcabcabc"; s 检查 abcabcabc;第二个应该包含这个,因为 (s+s);这返回 true;

2.abababc

ex 2. checker = "bababcabababc";它不会包含“abababc” bababc/abababc 吗?返回假;

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

【问题讨论】:

  • 如果您包含问题会很好,我认为这是回文检查?至于Contains方法见official doc
  • @LukeVo "给定一个字符串 s,检查它是否可以通过获取它的子字符串并将子字符串的多个副本附加在一起来构造。"问题是官方文档,在这种情况下无法拯救我。我在这里完全是脑残。我以为我明白 Contain 的意思,但是在这个解决方案之后,我显然不明白
  • 一目了然,您的连接字符串中的字符过多。引用的代码应删除连接的第一个和最后一个字符。否则包含将毫无意义。
  • @MarkBalhoff 然而,这个解决方案被成功通过了。我加倍检查以确保没有任何内容被截断,并且确实一直到字符串的末尾。没有任何东西被切断
  • 我认为你没有关注我。在示例 #2 中,您将 checker1 评估为 bababcabababc,但它实际上评估为 bababcababab,后者短一个字符且不包含初始字符串。

标签: c# string algorithm contains


【解决方案1】:

子字符串长度是输入长度的两倍减去 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)
                            ^----^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多