欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串

发布时间:2025/3/19 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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. 连接两字母单词得到的最长回文串的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。