有兩個長度相同的字串 s1 和 s2,且它們其中 只含有 字元 "x" 和 "y",你需要通過「交換字元」的方式使這兩個字串相同。每次「交換字元」的時候,你都可以在兩個字串中各選乙個字元進行交換。
交換只能發生在兩個不同的字串之間,絕對不能發生在同乙個字串內部。也就是說,我們可以交換 s1[i] 和 s2[j],但不能交換 s1[i] 和 s1[j]。
最後,請你返回使 s1 和 s2 相同的最小交換次數,如果沒有方法能夠使得這兩個字串相同,則返回 -1 。
示例 1:
輸入:s1 = "xx", s2 = "yy"
輸出:1
解釋:交換 s1[0] 和 s2[1],得到 s1 = "yx",s2 = "yx"。
1.理解清題意
class solution:
def minimumswap(self, s1: str, s2: str) -> int:
x = len(['x' for i in range(len(s1)) if s1[i] != s2[i] and s1[i] == 'x'])
y = len(['y' for i in range(len(s1)) if s1[i] != s2[i] and s1[i] == 'y'])
if (x+y)%2 != 0 and len(s1)!=len(s2):
return -1
return x//2 + y//2 + x%2 + y%2
交換字元使得字串相同
有兩個長度相同的字串s1 和s2,且它們其中只含有字元 x 和 y 你需要通過 交換字元 的方式使這兩個字串相同。每次 交換字元 的時候,你都可以在兩個字串中各選乙個字元進行交換。交換只能發生在兩個不同的字串之間,絕對不能發生在同乙個字串內部。也就是說,我們可以交換s1 i 和s2 j 但不能交換s...
切割字串,使得子字串首尾相同的最小切割數
includeusing namespace std 給定乙個非空字串s,將s切割成若干個非空子串,要求每個子串頭尾是相同字元,給出切割子串的數量的最小的方法。int ans int max ac 75 版本 void fun string s,int cnt,int left,int right ...
交換字串
include include using namespace std void swap char a,char b 傳指標引用,傳入的是實參而不是形參,所以能夠實現交換 intmain 寫這個還發現乙個鬼畜的事情,vs2017不支援 char ap hey 這種寫法,看其他博主也遇到了這個問題,...