Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串
生活随笔
收集整理的這篇文章主要介紹了
Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
5962. 連接兩字母單詞得到的最長(zhǎng)回文串
題目描述?
?
解題思路和解題代碼
定義map和sameMap。如果兩個(gè)字母一樣,就看sameMap里面有沒有記錄,有的話把該記錄取出來,結(jié)果總數(shù)+4,沒有的話,放入sameMap。 ?如果兩個(gè)字母不一樣,把兩個(gè)字母倒轉(zhuǎn)過來,就看map里面有沒有倒轉(zhuǎn)后的記錄, 有的話把該記錄數(shù)-1,結(jié)果總數(shù)+4, 沒有的話,把未倒轉(zhuǎn)的結(jié)果放入map
public class Solution5962 {public static void main(String[] args) {int e = new Solution5962().longestPalindrome(new String[]{"mm", "mm", "yb", "by", "bb", "bm", "ym", "mb", "yb","by", "mb", "mb", "bb", "yb", "by", "bb", "yb", "my", "mb", "ym"});System.out.println(e);}public int longestPalindrome(String[] words) {HashMap<String, Integer> map = new HashMap<>(words.length);//存兩個(gè)字母不一樣的HashMap<String, Integer> sameMap = new HashMap<>(words.length);//存兩個(gè)字母一樣的int res = 0;for (String word : words) {if (word.charAt(0) == word.charAt(1)) {// 如果兩個(gè)字母一樣,就看sameMap里面有沒有記錄,// 有的話把該記錄取出來,結(jié)果總數(shù)+4// 沒有的話,放入sameMapint val = sameMap.getOrDefault(word, 0);if (val == 0) {sameMap.put(word, 1);} else if (val == 1) {sameMap.remove(word);res += 4;}} else {// 如果兩個(gè)字母不一樣,把兩個(gè)字母倒轉(zhuǎn)過來,就看map里面有沒有倒轉(zhuǎn)后的記錄// 有的話把該記錄數(shù)-1,結(jié)果總數(shù)+4// 沒有的話,把未倒轉(zhuǎn)的結(jié)果放入mapStringBuilder stringBuilder = new StringBuilder();stringBuilder.append(word.charAt(1));stringBuilder.append(word.charAt(0));String reverse = stringBuilder.toString();int val = map.getOrDefault(reverse, 0);if (val == 0) {map.put(word, map.getOrDefault(word, 0) + 1);} else {map.put(reverse, map.getOrDefault(reverse, 0) - 1);res += 4;}}}// 最后看看還有沒有兩個(gè)字母相同的,有的話就放中間if (sameMap.size() > 0) {res += 2;}return res;} }解題結(jié)果
?
總結(jié)
以上是生活随笔為你收集整理的Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode69场双周赛-第二题59
- 下一篇: Leetcode69场双周赛-第四题59