使两个字符串在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中找到LCS的长度,然后从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) {
   //一一检查所有基地
   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 << "可以表示";
   else
      cout << "无法代表";
}

输出结果

可以表示