给定一个只包含'('和')'的字符串,计算最长有效(格式正确且连续)括号子串的长度

给定一个只包含'('')'的字符串,计算最长有效(格式正确且连续)括号子串的长度。在原问题基础上,假设字符串是分布式存储在多个节点上,每个节点存储一部分字符串,设计并实现一个分布式算法来解决该问题。请手写伪代码实现,详细描述算法思路,分析算法的时间复杂度和空间复杂度,并给出关键代码实现。

 

时间复杂度 O(n)

空间复杂度 O(n)

  /**
     * 计算最长回文子串的深度即长度
     * @param srcStr
     * @return
     */
    public static Integer getMaxHuiwenSubStrLen(String srcStr){
        String s = changeParenStrIntoFormatStr(srcStr);
        if (s==null){
            return null;
        }
        if (s.isEmpty()){
            return null;
        }
        if (!isHuiwenStr(s)){
            return null;
        }
        return s.length()/2;
    }

    /**
     * 把括号字符串格式化成为回文字符串
     * @param parenStr
     * @return
     */
    public static String changeParenStrIntoFormatStr(String parenStr){
        if (parenStr==null){
            return null;
        }
        if (parenStr.isEmpty()){
            return null;
        }
        for (int i = 0; i < parenStr.length(); i++) {
            char c = parenStr.charAt(i);
            if (!(c=='(' || c== ')')){
                return null;
            }
        }
        if (!isHuiwenStr(parenStr)){
            return null;
        }
        ArrayList<Character> characters = new ArrayList<>();
        for (int i = 0; i < parenStr.length(); i++) {
            char c = parenStr.charAt(i);
            if (c=='('){
                characters.add('a');
            } else if (c==')') {
                characters.add('a');
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        characters.forEach(e->{
            stringBuilder.append(e);
        });
        return stringBuilder.toString();
    }
    /**
     * 判断字符串是否是回文字符串
     * @param srcStr
     * @return
     */
    public static Boolean isHuiwenStr(String srcStr){
        if (srcStr==null){
            return null;
        }
        if (srcStr.isEmpty()){
            return null;
        }
        if (srcStr.length()%2!=0){
            return null;
        }
        int count=0;
        for (int i = 0; i < srcStr.length()/2; i++) {
            char c = srcStr.charAt(i);
            char c1 = srcStr.charAt(srcStr.length() - i - 1);
            if (c==c1){
                count++;
                if (count==srcStr.length()/2){
                    break;
                }
                continue;
            }else {
                return false;
            }
        }
        return true;
    }

#产品每日一题#
Java技术 文章被收录于专栏

JavaEE技术 编程开发经验 企业通用技术

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 12:10
点赞 评论 收藏
分享
仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务