当前位置: 首页 > article >正文

LeetCode2414题: 最长的字母序连续子字符串的长度(原创)

【题目描述】

字母序连续字符串 是由字母表中连续字母组成的字符串。换句话说,字符串 "abcdefghijklmnopqrstuvwxyz" 的任意子字符串都是 字母序连续字符串 。

  • 例如,"abc" 是一个字母序连续字符串,而 "acb" 和 "za" 不是。

给你一个仅由小写英文字母组成的字符串 s ,返回其 最长 的 字母序连续子字符串 的长度。

示例 1:

输入:s = "abacaba"
输出:2
解释:共有 4 个不同的字母序连续子字符串 "a"、"b"、"c" 和 "ab" 。
"ab" 是最长的字母序连续子字符串。

示例 2:

输入:s = "abcde"
输出:5
解释:"abcde" 是最长的字母序连续子字符串。

提示:

  • 1 <= s.length <= 105
  • s 由小写英文字母组成

题目链接:. - 力扣(LeetCode)

【解题代码】

public class LongestContinuousSubstring {

    public static void main(String[] args) {
        String s = "abcde"; //"abacaba";
        int result = new LongestContinuousSubstring().longestContinuousSubstring(s);
        System.out.println("最长的字母序连续子字符串的长度:" + result);
    }

    public int longestContinuousSubstring(String s) {
        int maxLen = 0, curLen = 1;
        int cur = 1;

        char lastChar = s.charAt(0);
        while (cur < s.length()) {
            char curChar = s.charAt(cur);
            if (curChar - lastChar == 1){
                curLen++;
                if (curLen == 26) return 26;
            } else{
                if (curLen > maxLen) maxLen = curLen;
                curLen = 1;
            }
            lastChar = curChar;
            cur++;
        }
        return curLen > maxLen ? curLen : maxLen;
    }

    public int longestContinuousSubstring1(String s) {
        int maxLen = 0, curLen = 1;
        int cur = 1;

        while (cur < s.length()) {
            if (s.charAt(cur) - s.charAt(cur - 1) == 1){
                curLen++;
                if (curLen == 26) return 26;
            } else{
                if (curLen > maxLen) maxLen = curLen;
                curLen = 1;
            }
            cur++;
        }
        return curLen > maxLen ? curLen : maxLen;
    }

}

【解题思路】

根据题目描述,感觉这道题应该比较简单,就是从头到尾不断比较字符串中相邻得两个字符,如果后一个字符比前一个字符大1,那么当前子字符串就是连续的,将其长度加1,如果不是,那么当前连续子字符串就到此为止,重新开始计算新的子字符串。按照这个思路很快完成编码,并提交成功

【解题步骤】

  1. 定义相关变量:最大子字符串长度maxLen,当前子字符串长度curLen,当前字符串索引值cur,上一字符lastChar等
    int maxLen = 0, curLen = 1;
    int cur = 1;
    char lastChar = s.charAt(0);
  2. 从头到尾依次获取字符串当前字符
    while (cur < s.length()) {
        char curChar = s.charAt(cur);
  3. 如果当前字符串比上一字符串大1,那么当前子字符串就是连续的,将其长度加1
     if (curChar - lastChar == 1){
        curLen++;
        if (curLen == 26) return 26;
    } 
  4. 否则那么当前连续子字符串就到此为止,重新开始计算新的子字符串
    else{
        if (curLen > maxLen) maxLen = curLen;
            curLen = 1;
    }
  5. 更新上一字符串值,以及更新当前字符串索引
    lastChar = curChar;
    cur++;
  6. 返回最终结果
    return curLen > maxLen ? curLen : maxLen;

【思考总结】

  1. 此题算法实现思路:从头到尾不断比较字符串中相邻得两个字符,如果后一个字符比前一个字符大1,那么当前子字符串就是连续的,将其长度加1,如果不是,那么当前连续子字符串就到此为止,重新开始计算新的子字符串。
  2. LeetCode解题之前,一定不要看题解,看了就“破功”了!

http://www.kler.cn/a/314001.html

相关文章:

  • Python标准库模块的使用:math、datetime
  • 工业相机选取
  • 【MySQL从入门到放弃】InnoDB磁盘结构(一)
  • 动态规划 —— 子数组系列-最大子数组和
  • arkUI:遍历数据数组动态渲染(forEach)
  • 超子物联网HAL库笔记:定时器[外部模式]篇
  • 【数据结构-差分】力扣1589. 所有排列中的最大和
  • 十三、SOA(企业服务总线ESB架构实现)
  • JVM 一个对象是否已经死亡?
  • Invalid Private Key, Not a valid string or uint8Array
  • jQuery国内大厂CDN加速链接
  • 741. 摘樱桃
  • JVM 案例研究与实战经验
  • 硬件工程师笔试面试——滤波器
  • IntelliJ IDEA 2024创建Java项目
  • 红帽 Quay- 配置镜像代理缓存
  • 记一次安装discuz时遇到的错误
  • descrTable常用方法
  • 利士策分享,自我和解:通往赚钱与内心富足的和谐之道
  • Leetcode—移除元素
  • 海外问卷调查:选择静态IP还是动态IP?
  • Python数据分析案例59——基于图神经网络的反欺诈交易检测(GCN,GAT,GIN)
  • Redis中Hash(哈希)类型的基本操作
  • 「已解决」KeyError: ‘getpwuid(): uid not found: 1004‘
  • 编写函数,对字符数组中的字母由大到小的字母顺序进行排序
  • Jira Cloud涨价5%-20%,钉钉项目Teambition成优选替代