ETH官方钱包

前往
大廳
主題

LeetCode - 2697. Lexicographically Smallest Palindrome 解題心得

Not In My Back Yard | 2024-07-24 12:00:01 | 巴幣 0 | 人氣 82

題目連結(jié):


題目意譯:
你被給定一個由小寫英文字母組成的字串 s,而你被允許在上面執(zhí)行若干次操作。在一次操作中,你可以將 s 中的一個字元換成另一個小寫英文字母。

你的任務是將 s 變成一個迴文,且操作數(shù)越少越好。如果有個可以藉由最少操作數(shù)形成的迴文,則選字典序最小者。

一個字串 a 字典序小於另一個字串 b(長度相同),代表著在 a 和 b 中第一個不一樣的字元上,字串 a 的字母在字母表中出現(xiàn)的順序比字串 b 同位置的字母還要早。

回傳結(jié)果迴文字串。

限制:
1 ≦ s.length ≦ 1000
s 只由小寫英文字母組成。



範例測資:
範例 1:
輸入: s = "egcfe"
輸出: "efcfe"
解釋: 讓 "egcfe" 變成一個迴文的最少所需操作數(shù)為 1,而其中藉由更動一個字元可以得到的字典序最小之迴文為 "efcfe",其是藉由改變 'g' 而得。

範例 2:
輸入: s = "abcd"
輸出: "abba"
解釋: 讓 "abcd" 變成一個迴文的最少所需操作數(shù)為 2,而其中藉由更動兩個字元可以得到的字典序最小之迴文為 "abba"。

範例 3:
輸入: s = "seven"
輸出: "neven"
解釋: 讓 "seven" 變成一個迴文的最少所需操作數(shù)為 1,而其中藉由更動一個字元可以得到的字典序最小之迴文為 "neven"。


解題思維:
(令 n = s.length)
可以看到,要讓 s 變成迴文就表示 s[0] 要和 s[n - 1] 一樣、 s[1] 要和 s[n - 2] 一樣……以此類推。

因此如果原先的 s[0] 和 s[n - 1] 不一樣,則變成迴文的最少操作數(shù)必定包含將 s[0] 和 s[n - 1] 變?yōu)橐粯拥牟僮鳎瑏K且此操作將與其他操作互不干涉。而其他字元對,如 s[1] 和 s[n - 2],也是同理。

並且可以看到 s[0] 和 s[n - 1] 要變?yōu)橐粯又恍枰淮尾僮鳎磳?s[0] 變成 s[n - 1] 或是 s[n - 1] 變成 s[0]。而為了要字典序最小的緣故,因此看 s[0] 和 s[n - 1] 哪個字典序較小,就將對方變成自己,這樣兩者的字典序都是最小的。其餘字元對也是同理。

因此按照上面的方式掃過每一個字元對並決定哪個字典序最小,然後統(tǒng)一變成最小者,最後得到的便是所求的最小字典序之迴文。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創(chuàng)作回應

追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作