首页 > 其他分享 >获取无重复字符的最长子串

获取无重复字符的最长子串

时间:2024-09-03 14:39:11浏览次数:9  
标签:子串 字符 return String public srcStr new Integer 最长

  1     /**
  2      * 获取无重复字符的最长子串
  3      * @param srcStr
  4      * @return
  5      */
  6     public static String getMaxLenNoRepeatChar(String srcStr){
  7         if (srcStr==null){
  8             return null;
  9         }
 10         if (srcStr.isEmpty()){
 11             return null;
 12         }
 13 
 14         Random random = new Random();
 15         int count=0;
 16         HashSet<String> stringHashSet = new HashSet<>();
 17         while (true){
 18 
 19             int subStrBegIndex = random.nextInt(srcStr.length());
 20             int subStrEndIndex = random.nextInt(srcStr.length());
 21             int subStrEndIndex1 = subStrEndIndex + 1;
 22             if (subStrBegIndex<subStrEndIndex1){
 23                 String substring = srcStr.substring(subStrBegIndex, subStrEndIndex1);
 24                 stringHashSet.add(substring);
 25             }
 26             if (count>1000000){
 27                 break;
 28             }
 29             count++;
 30         }
 31 
 32         ArrayList<String> stringArrayList = new ArrayList<>();
 33         for (String s : stringHashSet) {
 34             boolean b = checkStrHasRepeatChar(s);
 35             if (!b){
 36                 stringArrayList.add(s);
 37             }
 38         }
 39 
 40         Collections.sort(stringArrayList, new Comparator<String>() {
 41             @Override
 42             public int compare(String o1, String o2) {
 43                 return o1.length()-o2.length();
 44             }
 45         });
 46 
 47         System.out.println(stringArrayList);
 48 
 49         HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
 50         for (String s : stringArrayList) {
 51             if (stringIntegerHashMap.containsKey(s.length()+"")){
 52                 stringIntegerHashMap.put(s.length()+"",stringIntegerHashMap.get(s.length()+"")+1);
 53             }else {
 54                 stringIntegerHashMap.put(s.length()+"",1);
 55             }
 56         }
 57 
 58         System.out.println(stringIntegerHashMap);
 59 
 60         ArrayList<CustmerStrCompute> custmerStrComputes = new ArrayList<>();
 61         for (Map.Entry<String,Integer> entry : stringIntegerHashMap.entrySet()){
 62             String key = entry.getKey();
 63             Integer value = entry.getValue();
 64 
 65             CustmerStrCompute custmerStrCompute = new CustmerStrCompute();
 66             custmerStrCompute.setId(UUID.randomUUID().toString());
 67             custmerStrCompute.setStrLen(Integer.valueOf(key));
 68             custmerStrCompute.setStrRepeatFrequence(value);
 69 
 70             custmerStrComputes.add(custmerStrCompute);
 71         }
 72 
 73         Collections.sort(custmerStrComputes, new Comparator<CustmerStrCompute>() {
 74             @Override
 75             public int compare(CustmerStrCompute o1, CustmerStrCompute o2) {
 76                 return o1.getStrLen()-o2.getStrLen();
 77             }
 78         });
 79 
 80         System.out.println(custmerStrComputes);
 81 
 82         CustmerStrCompute custmerStrCompute = custmerStrComputes.get(custmerStrComputes.size() - 1);
 83         Integer strLen = custmerStrCompute.getStrLen();
 84 //        Integer strRepeatFrequence = custmerStrCompute.getStrRepeatFrequence();
 85         ArrayList<String> stringArrayList1 = new ArrayList<>();
 86         for (String s : stringArrayList) {
 87             if (s.length()==strLen){
 88                 stringArrayList1.add(s);
 89             }
 90         }
 91         return stringArrayList1.toString();
 92     }
 93 
 94     /**
 95      * 判断字符串是否有重复字符
 96      * @param srcStr
 97      * @return
 98      */
 99     public static boolean checkStrHasRepeatChar(String srcStr){
100         if (srcStr==null){
101             return false;
102         }
103         if (srcStr.isEmpty()){
104             return false;
105         }
106 
107         HashMap<Character, Integer> characterIntegerHashMap = new HashMap<>();
108         for (int i = 0; i < srcStr.length(); i++) {
109             char c = srcStr.charAt(i);
110             if (characterIntegerHashMap.containsKey(c)){
111                 characterIntegerHashMap.put(c,characterIntegerHashMap.get(c)+1);
112             }else {
113                 characterIntegerHashMap.put(c,1);
114             }
115         }
116 
117         for (Map.Entry<Character,Integer> entry : characterIntegerHashMap.entrySet()){
118 //            Character key = entry.getKey();
119             Integer value = entry.getValue();
120 
121             if (value>=2){
122                 return true;
123             }
124         }
125         return false;
126     }
127 
128 class CustmerStrCompute{
129     private String id;
130     private Integer strLen;
131     private Integer strRepeatFrequence;
132 
133     public String getId() {
134         return id;
135     }
136 
137     public void setId(String id) {
138         this.id = id;
139     }
140 
141     public Integer getStrLen() {
142         return strLen;
143     }
144 
145     public void setStrLen(Integer strLen) {
146         this.strLen = strLen;
147     }
148 
149     public Integer getStrRepeatFrequence() {
150         return strRepeatFrequence;
151     }
152 
153     public void setStrRepeatFrequence(Integer strRepeatFrequence) {
154         this.strRepeatFrequence = strRepeatFrequence;
155     }
156 
157     @Override
158     public String toString() {
159         return "CustmerStrCompute{" +
160                 "id='" + id + '\'' +
161                 ", strLen=" + strLen +
162                 ", strRepeatFrequence=" + strRepeatFrequence +
163                 '}';
164     }
165 }

 

标签:子串,字符,return,String,public,srcStr,new,Integer,最长
From: https://www.cnblogs.com/liaowanzhong/p/18394516

相关文章

  • 11.吐血整理sed入门到精通,sed语法,脚本命令,打印,替换,删除,插入,行替换,字符替换,保
    文章目录前言sed介绍1.sed介绍2.sed语法介绍3.sed脚本命令1.打印2.s替换3.删除脚本命令d3.插入脚本命令a/i4.行替换脚本命令c4.字符替换脚本y5.保存内容脚本w6.插入其他文本r6.中断退出脚本命令q脚本命令当中的地址[address]正则表达式sed[选项]1.sed-i选项2.sed-e......
  • PHP批量修改MySQL数据表字符集为utf8mb4/utf8mb4_unicode_ci
    编码大全可参考我之前的文章:快速理解ASCII、GBK、Unicode、UTF-8、ANSI批量修改注意这是DDL操作,操作过程会锁表(元数据锁),平均1秒能够转码3张表(数据量不大)。亲测操作过后没有数据异常,推荐执行前备份。//接手一些老项目,需要修改编码。$host='';$db='';$user='';$pa......
  • 字符集介绍
    在计算机科学中,字符集(CharacterSet)是指一组用于表示文本中字符的集合。字符集通过特定的编码方式,将字符与其在计算机内存或存储设备中的二进制表示联系起来。字符集在文本处理、文件传输、网络通信等场景中起着至关重要的作用。1.字符与编码的关系字符是信息的最小......
  • 多字节字符串和宽字节字符串相互转换
    #define_CRT_SECURE_NO_WARNINGS/*多字节转宽字节*/intunsafe_mbstowcs(){//设置当前的locale为用户环境变量指定的localesetlocale(LC_ALL,"");//定义多字节字符串constchar*mbstr="Hello,世界!";//计算需要的缓冲区大小size_......
  • 2024.9.2 Python,用栈写每日温度,等差数列划分,子串所有可能性,等差数列划分,深度优先搜索
    1.每日温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,......
  • 第十讲:怎么给字符串字段加索引?
    第十讲:怎么给字符串字段加索引?​ 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。总概类似邮箱登录系统的长表索引假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的:mysql>createtableSUser(IDbigintunsigned......
  • 【4.0】字符串的内置方法
    【一】字符串内置方法#【1】字符串拼接#"+"可以字符串拼接#''.join(可迭代类型)借助元组或者列表print(''.join(["1","2","3"]))#123print("-".join("coll"))#c-o-l-lprint("*".join({"fit",......
  • 使用C++编写程序,提示并输入一个字符串,统计其中的英文字符,数字,空格以及其他字符的数量
    由于c++兼容c语言的程序,所以子函数使用了c语言的内容#include<iostream>#include<string.h>usingnamespacestd;voidCount(constcharstr[]){intletter=0,num=0,space=0,etc=0;while(*str!='\0'){if((*str>='a'&&*......
  • 【算法每日一练及解题思路】多种方式判断指定字符串其是否为回文字符串
    一、题目:给定一个字符串,判断其是否为回文字符串:二、举例:回文字符串是指一个字符串正读和反读都一样的字符串。例如,“level”、“radar”和“noon”都是回文字符串,因为它们从前往后读和从后往前读都是一样的在Java中,有多种方法可以判断一个字符串是否为回文字符串。以下是......
  • 6.字符串类型和年龄游戏的升级
    数字和字符串类型对字符串的操作有如下变量name="aleX",请按照要求实现每个功能:1.移除name变量对应的值两边的空格,并输出处理结果2.判断name变量对应的值是否以"al"开头,并输出结果3.判断name变量对应的值是否以"X"结尾,并输出结果4.将name变量对应的值中的......