动态规划子数组系列一>环绕字符串中唯一的子字符串

题目:


解析:


代码:

java 复制代码
 public int findSubstringInWraproundString(String ss) {
        int n =  ss.length();
        int[] dp = new int[n];
        char[] s = ss.toCharArray();
        for(int i = 0; i < n; i++) dp[i] = 1;
        for(int i = 1; i < n; i++){
            if(s[i - 1] + 1 == s[i] || (s[i - 1] == 'z' && s[i] == 'a'))
                dp[i] += dp[i-1];
        }

        //去重:把dp表中的字串重复的,只留最长的字串(hash表来建立映射关系)
        int[] hash = new int[26];
        for(int i = 0; i < n; i++)
            hash[s[i]-'a'] = Math.max(hash[s[i]-'a'], dp[i]);

  
        //返回
        int ret = 0;
        for(int x : hash)
            ret += x;

        return ret;
    }
相关推荐
memcpy02 分钟前
LeetCode 1456. 定长子串中元音的最大数目【定长滑窗模板题】中等
算法·leetcode·职场和发展
liuyao_xianhui6 分钟前
优选算法_模拟_提莫攻击_C++
开发语言·c++·算法·动态规划·哈希算法·散列表
玛丽莲茼蒿20 分钟前
LeetCode hot100【相交链表】【简单】
算法·leetcode·职场和发展
罗湖老棍子21 分钟前
They Are Everywhere(Codeforces- P701C)
算法·滑动窗口·codeforce题解
wen__xvn21 分钟前
力扣模拟题刷题
算法·leetcode
bbbb36521 分钟前
算法复杂度与能耗关系的多变量分析研究的技术7
算法
不要秃头的小孩24 分钟前
力扣刷题——111.二叉树的最小深度
数据结构·python·算法·leetcode
wutang0ka36 分钟前
LeeCode HOT 100 104.二叉树的最大深度
算法
散峰而望40 分钟前
【基础算法】从入门到实战:递归型枚举与回溯剪枝,暴力搜索的初级优化指南
数据结构·c++·后端·算法·机器学习·github·剪枝
setmoon21442 分钟前
C++代码规范化工具
开发语言·c++·算法