当前位置:
首页 >
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. 连接两字母单词得到的最长回文串的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Leetcode69场双周赛-第二题59
- 下一篇: Leetcode69场双周赛-第四题59