文档章节

Java练习题-输入一个字符串,如何求最大重复出现的字符串?

思想永无止境
 思想永无止境
发布于 2016/11/04 11:58
字数 465
阅读 2
收藏 0

比如输入 ttabcftrgabcd,输出结果为 abc, canffcancd,输出结果为 can。

下面是解题代码:

import java.util.HashMap;
import java.util.Map;

/** * 输入一个字符串,如何求最长的重复出现的字符串?<br> * 比如输入 ttabcftrgabcd,输出结果为 abc, canffcancd,输出结果为 can。 * * @author Tang */
public class Test {

    public static void main(String[] args) {
        System.out.println("ttabcftrgabcd中最长的重复字符串:" + computeMaxRepeatString("ttabcftrgabcd"));
        System.out.println("canffcancd中最长的重复字符串:" + computeMaxRepeatString("canffcancd"));
        System.out.println();
        System.out.println("A中最长的重复字符串:" + computeMaxRepeatString("A"));
        System.out.println("AB中最长的重复字符串:" + computeMaxRepeatString("AB"));
        System.out.println();
        System.out.println("ABCDBCD中最长的重复字符串:" + computeMaxRepeatString("ABCDBCD"));
        System.out.println("ABCDBCDCD中最长的重复字符串:" + computeMaxRepeatString("ABCDBCDCD"));
        System.out.println();
        System.out.println("ABCDABCDCD中最长的重复字符串:" + computeMaxRepeatString("ABCDABCDCD"));
        System.out.println("ABCDABCDBCDCD中最长的重复字符串:" + computeMaxRepeatString("ABCDABCDBCDCD"));
    }

    /** * 计算最长的重复字符串 * * @param str * @return */
    public static String computeMaxRepeatString(String str) {

        String maxNumberKey = null;
        Integer maxNumberNumber = 0;
        int len = str.length();

        if (len < 1) {
            throw new RuntimeException("string is empty");
        }

        if (len < 2) {
            return str.charAt(0) + "";
        }

        for (int i = 2; i <= len; i++) {//i = 2意思是至少两个字符才开始算字符串

            Object[] maxValue = computeMaxRepeatString(str, i);

            String numberKey = (String) maxValue[0];
            Integer numberNumber = (Integer) maxValue[1];

            if (numberNumber >= maxNumberNumber || numberNumber >= 2) {
                maxNumberKey = numberKey;
                maxNumberNumber = numberNumber;
            }
        }
        return maxNumberKey;
    }

    private static Object[] computeMaxRepeatString(String str, int count) {

        Map<String, Integer> numberMap = new HashMap<>();
        String maxNumberKey = null;
        Integer maxNumberNumber = 0;

        for (int i = 0; i <= str.length() - count; i++) {

            String temp = str.substring(i, i + count);

            Integer charNumber = numberMap.get(temp);
            if (charNumber == null) {
                charNumber = 1;
            } else {
                charNumber++;
            }
            numberMap.put(temp, charNumber);

            if (maxNumberKey == null) {
                maxNumberKey = temp;
                maxNumberNumber = charNumber;
            } else {
                if (charNumber > maxNumberNumber) {
                    maxNumberKey = temp;
                    maxNumberNumber = charNumber;
                }
            }
        }
        return new Object[] { maxNumberKey, maxNumberNumber };
    }
}

打印结果:
ttabcftrgabcd中最长的重复字符串:abc
canffcancd中最长的重复字符串:can

A中最长的重复字符串:A
AB中最长的重复字符串:AB

ABCDBCD中最长的重复字符串:BCD
ABCDBCDCD中最长的重复字符串:BCD

ABCDABCDCD中最长的重复字符串:ABCD
ABCDABCDBCDCD中最长的重复字符串:ABCD

© 著作权归作者所有

思想永无止境
粉丝 4
博文 257
码字总数 292814
作品 0
昌平
程序员
私信 提问
Java架构师六大互联网公司面试经历总结

Java架构师面试经历 Java架构师面试经历从58同城——华为 ——招商银行网络中心——金蝶互联网公司GR——苏宁易购 ——蚂蚁金服,看完鬼知道我经历了什么,但是每一次都是成长。本人从2013年...

java知识分子
04/09
0
0
05《Java核心技术》之三种字符串类有什么区别?

一、提出问题 今天,我们来聊聊日常使用的字符串,别看它似乎很简单,但其实字符串几乎在所有编程语言里都是个特殊的存在,因为不管是数量还是体积,字符串都是大多数应用中的重要组成。 今天...

飞鱼说编程
2018/09/24
0
0
Hadoop大数据入门到实战(第七节)- Mapreduce的使用

MapReduce是Hadoop的核心功能之一,我们首先需要弄明白MapReduce到底是个啥,是干啥子用滴才行。 什么是MapReduce MapReduce是一种可用于数据处理的编程模型,我们现在设想一个场景,你接到一...

MasterXiao
2018/08/21
0
0
LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字

1、题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2、题目地址 https://leetcode.com/problems/largest-number/ 3、题目内容 英文:Given a list of non negative inte...

北风其凉
2015/08/08
0
0
Excel自定义格式Java类

求一个JAVA工具类 输入是字符串和参数串 输出是格式化后的字符串 要求如下 输入988046482,和类型那个字符串 输出示例中字符串 其实就是将Excel自定义格式 用JAVA解析...

Jack001
2015/11/11
277
2

没有更多内容

加载失败,请刷新页面

加载更多

kubernetes API 访问控制在阿里云容器服务(ACK)上的实践

提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷...

zhaowei121
15分钟前
0
0
从HelloWorld看Knative Serving代码实现

概念先知 官方给出的这几个资源的关系图还是比较清晰的: 1.Service: 自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流...

迷你芊宝宝
16分钟前
0
0
如何防止http请求数据被篡改

故事的开始,面试官问了我一个问题: 如何防止http请求中数据被篡改? 回答: 1.设置客户端IP黑/白名单 1.1.客户端所有请求,请求到代理服务器(nginx),代理服务器维护黑/白名单的ip,决定是...

太猪-YJ
20分钟前
0
0
好程序员大数据笔记之:Hadoop集群搭建

在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天集中总结以下笔记,希望对各位同学...

好程序员IT
27分钟前
0
0
MySql用navcat连接时报错 2509

在8版本以后的MySql默认的加密方式都改为了caching_sha2_password 因此进入mysql的命令行更改加密方式即可 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER......

lanyu96
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部