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

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

 

时间复杂度 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技术 编程开发经验 企业通用技术

全部评论

相关推荐

zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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