1737 滿足三條件之一需改變的最少字元數

2021-10-17 10:36:53 字數 1590 閱讀 8809

題目描述:

給你兩個字串 a 和 b ,二者均由小寫字母組成。一步操作中,你可以將 a 或 b 中的 任一字元 改變為 任一小寫字母 。

操作的最終目標是滿足下列三個條件 之一 :

a 中的 每個字母 在字母表中 嚴格小於 b 中的 每個字母 。

b 中的 每個字母 在字母表中 嚴格小於 a 中的 每個字母 。

a 和 b 都 由 同乙個 字母組成。

返回達成目標所需的 最少 運算元。

示例 1:

輸入:a = 「aba」, b = 「caa」

輸出:2

解釋:滿足每個條件的最佳方案分別是:

將 b 變為 「ccc」,2 次操作,滿足 a 中的每個字母都小於 b 中的每個字母;

將 a 變為 「bbb」 並將 b 變為 「aaa」,3 次操作,滿足 b 中的每個字母都小於 a 中的每個字母;

將 a 變為 「aaa」 並將 b 變為 「aaa」,2 次操作,滿足 a 和 b 由同乙個字母組成。

最佳的方案只需要 2 次操作(滿足條件 1 或者條件 3)。

示例 2:

輸入:a = 「dabadd」, b = 「cda」

輸出:3

解釋:滿足條件 1 的最佳方案是將 b 變為 「eee」 。

1 <= a.length, b.length <= 105

a 和 b 只由小寫字母組成

方法1:

(1)分別計算出滿足條件1,2,3時,需要改變的最小數,然後取三個值中的最小值;

class

solution

for(

char

&ch:b)

//初始化滿足三個條件的最小改變次數

int need_change_1=int_max;

int need_change_2=int_max;

int need_change_3=int_max;

//條件1

int left=counts_a[0]

;int right=b.

size()

-counts_b[0]

;for

(int i=

1;i<26;

++i)

//條件2

left=counts_b[0]

; right=a.

size()

-counts_a[0]

;for

(int i=

1;i<26;

++i)

//條件3

if(a.

size()

==b.

size()

) need_change_3=

2*a.

size()

-n;}

//返回最小值

return

min(need_change_1,

min(need_change_2,need_change_3));

}};

Linux Shell(三) 條件判斷

str1 str2 當兩個串有相同內容 長度時為真 str1 str2 當串str1和str2不等時為真 n str1 當串的長度大於0時為真 串非空 z str1 當串的長度為0時為真 空串 str1 當串str1為非空時為真 int1 eq int2 兩數相等為真 int1 ne int2 兩數...

三 條件與迴圈

迴圈語句 v if 作用 條件判斷 例子 seen 現在你看到我了 p ok h1 學的不僅是技術,更是夢想!p 哈哈哈,打字辛苦啊!p template div newvue script v if指令將根據表示式seen的值 true或false 來決定是否插入p元素 字串模板中,寫條件快 ye...

MySQL 基礎三(條件查詢)

條件查詢語法 select 查詢列表 from 表名where 篩選條件 執行順序 from 表名 篩選條件 查詢列表 分類 示例 案例1 查詢工資 12000的員工資訊 select from employees where salary 12000 案例2 查詢部門編號不等於90號的員工名和部門...