两个相同字符之间的最长子字符长度

两个字符串之间的最长子字符长度

一、题目描述

给定一个字符串s,返回两个相同字符之间的最长子字符串的长度,如果不存在则返回-1;
示例:

输入:s = "aa"
输出:0
解释:最优的子字符串是两个 'a' 之间的空子字符串。

输入:s = "abca"
输出:2
解释:最优的子字符串是 "bc" 。

输入:s = "cbzxy"
输出:-1
解释:s 中不存在出现出现两次的字符,所以返回 -1 。

二、题目分析

这里需要找到最长的字符串长度,首先需要考虑的特殊情况。没有字串时,和只有字串时。有多个字串时。每一次的字串长度需要记录,最后找到最长字串即可。

三、解题思路

直接遍历,字母有26个,创建一个长度为26字符数组firstIndex,并初始化为-1。这里firstIndex存放的是字符在s字符串的索引。如果不为-1.则说明此字母出现过一次,只需将两个字符相减,并记录长度。为-1时,说明第一次遇见字符。存索引进firstIndex中。
代码实现:

class Solution {
    public int maxLengthBetweenEqualCharacters(String s) {
        int[] firstIndex = new int[26];

        Arrays.fill(firstIndex,-1);
        int Maxlong = -1;

        for(int i=0; i<s.length();i++){
            if(firstIndex[s.charAt(i)  - 'a'] <0){
                firstIndex[s.charAt(i)  - 'a'] = i;
            }else{
                Maxlong = Math.max(Maxlong, i-firstIndex[s.charAt(i)  - 'a']-1);
            }
        }

        return Maxlong;
    } 
}
posted @ 2022-09-17 23:16  z_coding  阅读(134)  评论(0)    收藏  举报