Hacker Rank中的字符串域下存在一个问题,名为Save Humanity 与链接 https://www.hackerrank.com/contests/princetonolympics/challenges/save-humanity
如果两个字符串等于其返回值true
,并且如果字符串中存在一位错误,则返回两个字符串,然后返回带有错误索引的字符串。
其他情况则为False。
我的解决方案适用于某些测试用例,但对于某些测试用例,结果是超时。
问题是如何降低复杂性。
为了检查一位错误,我正在使用charAt
函数。由于这个原因,复杂性增加了。
请帮忙。
答案 0 :(得分: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),对于大多数情况来说应该足够快。如果您需要更快的算法,您可以研究编辑距离,这是一般情况下此问题的名称,但我不认为有更快的算法。