C++中使两个字符串相同的最小成本


假设我们有两个字符串A和B,以及另外两个成本值CostA和CostB。我们必须找到使A和B相同的最小成本。我们可以从字符串中删除字符,从字符串A中删除的成本是CostA,从字符串B中删除的成本是CostB。从字符串中删除所有字符的成本相同。假设字符串A = “wxyz”,B = “wyzx”,CostA为10,CostB为20。那么输出将为30。如果我们从两个字符串中都删除x,则A和B将相同。所以成本是10 + 20 = 30。

这是最长公共子序列问题的一个变体。我们必须找到A和B的最长公共子序列的长度,然后从A和B中减去LCS长度,这样我们就可以得到要删除的字符数。

示例

 在线演示

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
   if (isRepresentedInDDigits(num, d, base))
   return true;
   return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

输出

Can be represented

更新于:2019年10月21日

151 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告