小明最近迷上了字串操作。對每個字串,小明每次可以執行以下兩種操作之一:
把字串中的某個字元改成任意乙個其他字元,花費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 ...