【问题标题】:Save Humanity Code in Hacker Rank在黑客等级中保存人类代码
【发布时间】:2015-09-27 19:34:55
【问题描述】:

Hacker Rank中字符串域下存在问题,命名为Save Humanity 带链接 https://www.hackerrank.com/contests/princetonolympics/challenges/save-humanity.

如果两个字符串相等,则返回true,如果字符串中有一位错误,则返回带有错误索引的true。 否则对于所有其他情况为 False。 我的解决方案适用于某些测试用例,但对于某些测试用例,结果是超时。

问题是如何降低复杂度。 为了检查一位错误,我使用了charAt 函数。因此,复杂性上升。 请帮忙。

【问题讨论】:

  • 您是否要发送垃圾邮件?我发现很难阅读你的问题,它被大写和小写字母搞得一团糟。请格式化。
  • 请提供一些代码。否则这个问题没有任何意义。
  • 其实,我认为像黑客等级这样的地方的想法是你通过自己解决问题来提高你的技能......
  • 请考虑重写问题,并显示一些您尝试过的代码(您提到您有代码)。当我们不了解您要解决的问题时,很难提供帮助。
  • @suresh atta 为之前的 Fromat 道歉。但是你怎么能把它称为垃圾邮件。请参考字典。

标签: java timeout time-complexity


【解决方案1】:

如果我理解正确,您有两个要比较的字符串,但即使它们在一个字符上不同,您也想接受它们。

这可以通过逐字节比较字符串在一个循环中完成。

char[] a = "abc".toCharArray();
char[] b = "abb".toCharArray();
boolean oneDiff = false;
for (int i = 0; i<){
    if(a[i] != b[i]){
       if(oneDiff)
         return false;
       oneDiff = true;
    }
}
return true;

这只有 O(n) 的时间复杂度,对于大多数情况来说应该足够快。如果您需要更快的算法,您可以研究编辑距离,这是一般情况下这个问题的名称,但我认为没有更快的算法。

【讨论】:

  • 您遇到了问题,但是当字符串包含 100000 个字符时,此解决方案效率低下。我的逻辑和这个一样
  • 真的不是。您只需遍历列表一次,这意味着它的运行时间为 O(n)。如果不至少检查一次列表,就无法解决此问题。即使对于小列表,此方法也相当快,因为​​它所做的只是一些数组查找。
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 2023-03-10
  • 2022-11-04
  • 2021-02-24
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多