Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串
生活随笔
收集整理的這篇文章主要介紹了
Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
5962. 連接兩字母單詞得到的最長回文串
題目描述?
?
解題思路和解題代碼
定義map和sameMap。如果兩個字母一樣,就看sameMap里面有沒有記錄,有的話把該記錄取出來,結果總數+4,沒有的話,放入sameMap。 ?如果兩個字母不一樣,把兩個字母倒轉過來,就看map里面有沒有倒轉后的記錄, 有的話把該記錄數-1,結果總數+4, 沒有的話,把未倒轉的結果放入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);//存兩個字母不一樣的HashMap<String, Integer> sameMap = new HashMap<>(words.length);//存兩個字母一樣的int res = 0;for (String word : words) {if (word.charAt(0) == word.charAt(1)) {// 如果兩個字母一樣,就看sameMap里面有沒有記錄,// 有的話把該記錄取出來,結果總數+4// 沒有的話,放入sameMapint val = sameMap.getOrDefault(word, 0);if (val == 0) {sameMap.put(word, 1);} else if (val == 1) {sameMap.remove(word);res += 4;}} else {// 如果兩個字母不一樣,把兩個字母倒轉過來,就看map里面有沒有倒轉后的記錄// 有的話把該記錄數-1,結果總數+4// 沒有的話,把未倒轉的結果放入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;}}}// 最后看看還有沒有兩個字母相同的,有的話就放中間if (sameMap.size() > 0) {res += 2;}return res;} }解題結果
?
總結
以上是生活随笔為你收集整理的Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode69场双周赛-第二题59
- 下一篇: Leetcode69场双周赛-第四题59