字串替換 貪心思想(c )詳解。

2022-09-07 10:24:12 字數 1587 閱讀 8591

小明最近迷上了字串操作。對每個字串,小明每次可以執行以下兩種操作之一:

把字串中的某個字元改成任意乙個其他字元,花費1的代價。

交換字串中的兩個字元,花費0的代價。

小明發現,把乙個字串通過一系列的操作,可以轉換成任何乙個與之等長的字串。例如,把 「hello」變為「world」的一種代價為 3 的操作序列如下:

hello → wello (替換 h 為 w,代價為 1)

wello → wolle (交換 e 和 o,代價為 0)

wolle → worle (替換 l 為 r,代價為 1)

worle → world (替換 e 為 d,代價為 1)

小明發現,無法用少於 3 次的代價將「hello」變為「world」。 顯然,不同的轉換方案花費的代價是不同的,請程式設計幫助小明計算把乙個字串變為另乙個字元 串的最小代價。

本題中的字串根據給定的初始數值 s 按以下規則生成:

for i = 1, 2, … n

s ← (s × 345) mod 19997

第乙個字串的第 i 個字元的 ascii 碼為(97 + (s mod 26))

for i = 1, 2, … n

s ← (s × 345) mod 19997

第二個字串的第 i 個字元的 ascii 碼為(97 + (s mod 26))

正整數 n (字串長度), s (資料生成器的初始數值)。1 ≤ n ≤ 1,000,1 ≤ s ≤ 19,997。

將第乙個字串轉換為第二個字串的最少代價。

4 35
2
在樣例 1 中,生成的字串是「lzvv」和「xylv」,將第乙個字串變為第二個的最小代價為 2。

1、題目要求最少代價,由題意很明顯,就是乙個很經典的貪心的題目

//生成第二個字串

for(i=

1; i<=n; i++

)//貪心的思想:先判斷在兩個字串裡面是否有相同的字母

//因為字母交換的代價最小,為0;

//餘下的就是需要交換的字母,那最終的代價最小

for(i=

1; i<=n; i++

)for

(j=1

; j<=n; j++)if

(a[i]

==b[j]

)printf

("%d\n"

,n-sum)

;//總共n個字母,如果每個都需要換的話,代價就最大了,現在我們把相同的替換(代價為零),剩下的就必須支付代價,為最小。

return0;

}

C 字串替換

編譯執行平台 vs2017 win32 debug 以下 作為平時 庫的儲備,僅供各位參考 brief 替換指定的子串 param src 原字串 target 待被替換的子串 subs 替換的子串 string replaceall const char src,const string targ...

字串替換(C )

用過python的朋友應該知道,python的string中有個replace函式,其功能是實現字串的替換,預設情況下是替換所有,如果加入引數的話會根據設定的個數進行替換,比如下面的例子 import string str1 ab1ab2ab3ab4 print string.replace str...

Leetcode 214 最短回文串 貪心思想

直觀的想法,先找到s從0開始的最長回文子串,然後答案就是右邊的反轉 s 問題變為求從0開始的最長回文子串,如果直接用從右貪心列舉的方法,時間複雜度是o n 2 超時。class solution if i s.length 1 return s for int j s.length 1 j i j ...