字串比較問題

2021-10-05 06:35:04 字數 1305 閱讀 2536

對於長度相同的兩個字串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 是的,我開始也是這樣寫的。可是我突然覺得...