美文网首页
Leetcode 1624 两个相同字符之间的最长子字符串

Leetcode 1624 两个相同字符之间的最长子字符串

作者: itbird01 | 来源:发表于2022-01-05 07:06 被阅读0次
    题目.png

    题意:给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。
    子字符串 是字符串中的一个连续字符序列。

    解题思路

    解法:
    1.分析题意,理解题意,问题转化为,求取哪两个相同字符之间的长度是最长的
    2.遍历s,以map存储数据,key为每个字符,value为list,为每个字符出现的位置
    3.遍历map,对于每个字符,排序list,求取第一个和最后一个index之差

    解题遇到的问题

    1.此题也可以用滑动窗口算法思想来解决,head、tail
    2.解法1中,其实一次遍历hash即可得到结果

    后续需要总结学习的知识点

    ##解法1
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map.Entry;
    
    class Solution {
        public int maxLengthBetweenEqualCharacters(String s) {
            // 分析题意,理解题意,问题转化为,求取哪两个相同字符之间的长度是最长的
            // 遍历s,以map存储数据,key为每个字符,value为list,为每个字符出现的位置
            HashMap<Character, List<Integer>> map = new HashMap<Character, List<Integer>>();
            for (int i = 0; i < s.length(); i++) {
                if (map.containsKey(s.charAt(i))) {
                    List<Integer> k = map.get(s.charAt(i));
                    k.add(i);
                } else {
                    List<Integer> k = new ArrayList<Integer>();
                    k.add(i);
                    map.put(s.charAt(i), k);
                }
            }
            // 遍历map,对于每个字符,排序list,求取第一个和最后一个index之差
            int max = -1;
            Iterator<Entry<Character, List<Integer>>> iterator = map.entrySet()
                    .iterator();
            while (iterator.hasNext()) {
                Entry<Character, List<Integer>> entry = iterator.next();
                List<Integer> list = entry.getValue();
                Collections.sort(list);
                int k = Math.abs(list.get(0) - list.get(list.size() - 1)) - 1;
                if (list.size() >= 2 && k >= 0) {
                    max = Math.max(max, k);
                }
            }
            return max;
        }
    }
    

    相关文章

      网友评论

          本文标题:Leetcode 1624 两个相同字符之间的最长子字符串

          本文链接:https://www.haomeiwen.com/subject/dpaqcrtx.html