C++ C++;回文检查解决方案被一个测试用例触发

C++ C++;回文检查解决方案被一个测试用例触发,c++,arrays,string,algorithm,palindrome,C++,Arrays,String,Algorithm,Palindrome,给定一个字符串s,请检查是否可以通过删除最多一个字符使其成为回文(这意味着可以接受零删除)。字符串s将包含如果光标指向不同的字母,并且可以从左侧或右侧光标中删除字符,则您的算法将只检查左侧的删除。如果回文是通过从右侧删除而形成的,那么代码将丢失它 因此,如果从左侧删除,还需要检查是否可以从右侧删除,并(可能)检查从左侧删除时是否没有回文。如果光标指向不同的字母,并且可以从左侧或右侧光标中删除字符,您的算法将只检查左侧的删除。如果回文是通过从右侧删除而形成的,那么代码将丢失它 因此,如果从左侧删除

给定一个字符串s,请检查是否可以通过删除最多一个字符使其成为回文(这意味着可以接受零删除)。字符串s将包含如果光标指向不同的字母,并且可以从左侧或右侧光标中删除字符,则您的算法将只检查左侧的删除。如果回文是通过从右侧删除而形成的,那么代码将丢失它


因此,如果从左侧删除,还需要检查是否可以从右侧删除,并(可能)检查从左侧删除时是否没有回文。

如果光标指向不同的字母,并且可以从左侧或右侧光标中删除字符,您的算法将只检查左侧的删除。如果回文是通过从右侧删除而形成的,那么代码将丢失它


因此,如果从左侧删除,还需要检查是否可以从右侧删除,并(可能)检查从左侧删除时是否没有回文。

听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:你们知道你们可以在一行中检查回文,在一条if语句中,对吗?它不是回文:在单词中有一个额外的字母,位于“u”字母的倒数第二位。对于最后两位评论员(@GuillaumeRacicot和@Bianca):问题是,删除一个字母是否可以使字符串成为回文。如果没有匹配项,该算法似乎总是尝试从列表的前半部分删除。我很惊讶560个测试用例中有458个通过了测试(或者我对算法的理解是错误的)。我知道有很多人在Stack Overflow上坚持使用代码,即使是算法问题,但我更希望代码至少附带一个自然语言描述,这样就可以调试算法而不是调试代码。听起来你可能需要学习如何使用调试器来逐步调试代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:你们知道你们可以在一行中检查回文,在一条if语句中,对吗?它不是回文:在单词中有一个额外的字母,位于“u”字母的倒数第二位。对于最后两位评论员(@GuillaumeRacicot和@Bianca):问题是,删除一个字母是否可以使字符串成为回文。如果没有匹配项,该算法似乎总是尝试从列表的前半部分删除。我很惊讶560个测试用例中有458个通过了测试(或者我对算法的理解是错误的)。我知道有很多人在堆栈溢出问题上坚持使用代码,即使是算法问题,但我更希望代码至少附带一个自然语言描述,这样就可以调试算法而不是调试代码。
else如果(s[lcursor]==s[rcursor-1]&&candelete)
不检查它是否可以从右侧删除?@NathanOliver确实可以,但如果你也可以从左侧删除,如果左侧删除没有回文,它就不会返回并检查右侧。说明问题的较小测试用例:CUUCU。问题中的算法删除初始C作为U的匹配项,但实际上是删除最后的U。
否则如果(s[lcursor]==s[rcursor-1]&&candelete)
不检查是否可以从右侧删除?@NathanOliver可以,但如果也可以从左侧删除,如果左边的删除没有形成回文,它不会返回并检查右边。说明问题的较小测试用例:CUUCU。问题中的算法删除了初始的C作为U的匹配项,但有效的方法是删除最后的U。
aguokepatgbnvfqmgmlcupuufxoohdfpgjdmysgvhmvffcnqxjjxqncffvmhvgsymdjgpfdhooxfuupuculmgmqfvnbgtapekouga