對於長度相同的兩個字串a和b,其距離定義為相應位置字元距離之和。兩個非空格字元的距離是它們的ascii編碼之差的絕對值。空格與空格的距離為0,空格與其他字元的距離為一定值k。
在一般情況下,字串a和b和長度不一定相同。字串a的擴充套件是在a中插入若干空格字元所產生的字串。在字串a和b的所有長度相同的擴充套件中,有一對距離最小的擴充套件,該距離稱為字串a和b的擴充套件距離。
對於給定的字串a和b,試設計乙個演算法,計算其擴充套件距離。
cmc
snmn
2
10
對於a,b兩字串可擴充套件成以下兩種形式,距離為10
c mc
snm n
用陣列dp[i][j]
來記錄a,b兩串擴充套件後的對應字元a[i]
和b[j]
的距離
對於每乙個a[i]
和b[j]
都有以下三種可能
1、a[i]
是字元,b[j]
是空格,則dp[i][j]=dp[i-1][j]+k
2、a[i]
是空格,b[j]
是字元,則dp[i][j]=dp[i][j-1]+k
3、a[i]
是字元,b[j]
是字元,則dp[i][j]=dp[i-1][j-1]+abs(a[i]-b[j])
所以狀態轉移方程為:dp[i][j]=min
注意:為了防止陣列越界,要先判斷i和j與1的大小關係
#include
#include
using
namespace std;
const
int max =
1e3+5;
//標識最大的可能整數
const
int inf =
0x3f3f3f3f
;int dp[max]
[max]
;string a;
//字串a
string b;
//字串b
int k;
//定值k
intsolve()
}}return dp[len1]
[len2];}
intmain()
問題 G 比較字串
輸入兩個字串,比較兩字串的長度大小關係。輸入第一行表示測試用例的個數m,接下來m行每行兩個字串a和b,字串長度不超過50。輸出m行。若兩字串長度相等則輸出a is equal long to b 若a比b長,則輸出a is longer than b 否則輸出a is shorter than b。...
比較字串
其實這是在 c 從入門到精通 上摘抄的,由於不知道漢字怎麼排序,就查了查書,寫在這裡也可以幫助其他初學者更方便的找到漢字的排序方法。用於排序 int compare string str1,string str2 int compare string str1,string str2,bool ig...
字串比較
題目是這樣的 比較兩個字串,忽略大小寫,比較長度不超過n,比較順序為字典序。返回如下 0 s1 s2 0 s1 s2 0 s1 首先我們會先寫乙個函式名,我想大部分同學會寫成如下形式 int strncompare char s1,char s2,int n 是的,我開始也是這樣寫的。可是我突然覺得...