当前位置: 首页 > 知识库问答 >
问题:

要删除的字符数和要添加的字符数是否相等?

沃瑾瑜
2023-03-14

我通过了两个问题-1。找到最小的插入数需要使字符串回文?2.找出字符串回文所需的最小删除数?

当我递归地处理它时,两个递归关系是相同的,例如“abcda”插入2(adcbcda),删除2(aca)

int minCharsToDeletePalindrome(const string& str, int lo, int hi) {
    if (lo == hi) {
        // Single character is always a palindrome
        return 0;
    }

    if (hi == lo + 1) {
        if (str[lo] == str[hi]) {
            return 0;
        }
        // This means there are only characters left now, 2 chars always need only 1 character to delete such they 
        // become a palindrome.
        return 1;
    }

    if (str[lo] == str[hi]) {
        return minCharsToDeletePalindrome(str, lo + 1, hi - 1);
    }
    else {
        // Added one because we have already deleted one character in both the cases.
        return min(minCharsToDeletePalindrome(str, lo, hi - 1)
            , minCharsToDeletePalindrome(str, lo + 1, hi)) + 1;
    }
}

从逻辑上看,它们应该是相等的,因为要删除的字符是阻止字符串成为回文的字符,因此如果我将相同的字符添加到字符串中,那么字符串应该成为回文,或者我可以用其他方法。

那么,我的推断是否正确,或者是否有任何情况下,它们是不相等的?

共有1个答案

景俊良
2023-03-14

他们永远是平等的。设S为输入字符串,P为通过添加k个字符生成的回文,其中k为可能的最小值。求这些k加法在P中的反射(在P的中心对称)。从S中删除这些反射将产生回文。因此,min_删除

例如,假设原始字符串是AXBYA。插入的最小数量为2:AX(Y)乘(X)A,插入以parens为单位。最小删除量为2:ABA,其中删除插入的两个字母的反射。

 类似资料:
  • 问题 你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。 解决方案 strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符。比如: >>> # Whitespace stripping >>> s = ' hello world \n' >>> s.strip()

  • 被删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的regEx还是反字符类的错误应用。

  • 本文向大家介绍Java程序要删除字符串中除“ 1”和“ 2”以外的所有数字?,包括了Java程序要删除字符串中除“ 1”和“ 2”以外的所有数字?的使用技巧和注意事项,需要的朋友参考一下 正则表达式“ (?<!\\ d) digit (?!\\ d) ”与指定的数字匹配。 replaceAll()方法接受两个字符串:正则表达式模式和替换字符串,并将模式替换为指定的字符串。 因此,要删除字符串中除1

  • 我试图将ArrayList的内容保存到一个txt文件中,但当我这样做时,会得到很多不需要的字符。逗号是我可以处理字符串的。replace()但我想知道是否有其他方法可以更有效地过滤这些类型的字符?尤其是“,”t[”txt文件中的一部分。上面的引号中还显示了其他字符,但我不想在这里复制它们。我要输出到文件的代码如下。我正在向ArrayList添加几个字符串,但问题似乎在于ArrayList本身。如下

  • 问题内容: 我得到的任务是从文本文件或字符串中删除所有非数字字符,包括空格,然后在旧字符旁边打印新结果,例如: 之前: 后: 由于我是初学者,所以我不知道从哪里开始。请帮忙 问题答案: 最简单的方法是使用正则表达式