栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-11

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-11

找出最长对称字符串

题目如下所示
    // TODO 输出最长对称字符串:goog
    String input1 = "google";

    // TODO 输出3个最长对称字符串:aba/aca/ada
    String input2 = "abcda";

    // TODO 输出2个最长对称字符串:pop/upu,不会输出特殊字符的对称字符串p-p
    String input3 = "pop-upu";
以下代码使用Java语言
package com.wz.demo;

import java.util.ArrayList;
import java.util.List;


public class Test1 {
    public static void main(String[] args) {
        // TODO 输出最长对称字符串:goog
        String input1 = "google";

        // TODO 输出3个最长对称字符串:aba/aca/ada
        String input2 = "abcda";

        // TODO 输出2个最长对称字符串:pop/upu,不会输出特殊字符的对称字符串p-p
        String input3 = "pop-upu";

        String input4 = "ababab";
        String input5 = "abcedecba";
        List result = findMaxLengthSymmetryStr(input2);
        System.out.println(result);

    }

    private static List findMaxLengthSymmetryStr(String input) {
        List symmetryStrs = new ArrayList<>();
        //根据字符和数字以外的特殊字符作为正则切割字符串
        String[] split = input.split("\W");
        for (String str : split) {
            for (int i = 0; i < str.length(); i++) {
                char left = str.charAt(i);
                String remainingStr = "";
                StringBuilder sb = new StringBuilder();
                for (int j = str.length() - 1; j > i; j--) {
                    char right = str.charAt(j);
                    if (left == right) {
                        sb.append(left);
                        if (j > i + 1) {
                            String substring = str.substring(i + 1, j);
                            if (substring.length() == 1 || !containsDuplicateChar(substring)) {
                                remainingStr = substring;
                            } else {
                                remainingStr = loopFind(sb, substring);
                            }
                        }
                        break;
                    }
                }

                if (sb.length() == 0) {
                    continue;
                }
                if (remainingStr.length() > 0) {
                    for (char c : remainingStr.toCharArray()) {
                        symmetryStrs.add(sb.toString() + c + sb.reverse().toString());
                    }
                } else {
                    symmetryStrs.add(sb.toString() + sb.reverse().toString());
                }
            }
        }

        return getMaxlengthStrs(symmetryStrs);
    }

    private static String loopFind(StringBuilder sb, String subStr) {
        String remainingStr = "";
        a:
        for (int i = 0; i < subStr.length(); i++) {
            char left = subStr.charAt(i);
            for (int j = subStr.length() - 1; j > i; j--) {
                char right = subStr.charAt(j);
                if (left == right) {
                    sb.append(left);
                    if (j > i + 1) {
                        String substring = subStr.substring(i + 1, j);
                        if (substring.length() == 1 || !containsDuplicateChar(substring)) {
                            return substring;
                        }
                        remainingStr = loopFind(sb, substring);
                    }
                    break a;
                }
            }
        }
        return remainingStr;
    }

    
    private static List getMaxlengthStrs(List strings) {
        List result = new ArrayList<>();
        int max = 1;
        for (String string : strings) {
            if (string.length() > max) {
                max = string.length();
                result.clear();
                result.add(string);
            } else if (string.length() == max) {
                result.add(string);
            }
        }
        return result;
    }

    
    private static boolean containsDuplicateChar(String str) {
        for (char c : str.toCharArray()) {
            int start = str.indexOf(c);
            int end = str.lastIndexOf(c);
            if (start != end) {
                return true;
            }
        }
        return false;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号