zoukankan      html  css  js  c++  java
  • 判断一个数字中是否包含两个相同的子串并输出

    功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于2),并输出(仅输出第一次相同的子串)
     1 package ren.laughing.test.problem;
     2 
     3 import java.util.Scanner;
     4 
     5 /**
     6  * 功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于2),并输出(仅输出第一次相同的子串)
     7  * 
     8  * @author Laughing_Lz
     9  * @time 2016年7月4日
    10  */
    11 public class ChildStr {
    12     private String str;
    13 
    14     /**
    15      * 判断输入字符串是否合法
    16      */
    17     public void input() {
    18         Scanner sc = new Scanner(System.in);
    19         str = sc.nextLine();
    20         sc.close();
    21         if (str.isEmpty()) {// 如果输入为空
    22             str = null;
    23             return;
    24         }
    25         for (int i = 0; i < str.length(); i++) {
    26             char c = str.charAt(i);
    27             if (str.isEmpty() || !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))) {// 限制条件
    28                 str = null;
    29                 return;
    30             }
    31         }
    32     }
    33 
    34     /**
    35      * 查找算法
    36      */
    37     public void search() {
    38         if (str == null) {
    39             System.out.println("输入字符串错误!");
    40             return;
    41         }
    42         int j = 1;// 此处将index定义在两个循环外,可实现在一次循环中j始终和i同步递进★
    43         int number = 0;// 记录相同子串长度
    44         int index = 0;// 记录字串起始位置
    45         for (int i = 0; i < str.length() - 1; i++) {
    46             char numi = str.charAt(i);// 当前位置数字
    47             if (i == str.length() - 2 || j == str.length()) {
    48                 number = 0;// 将number归0
    49                 j = i + 1;// 一次循环后,将j移回i+1起始点,再次遍历
    50             }
    51             for (; j < str.length(); j++) {
    52                 char numj = str.charAt(j);
    53                 if (numi == numj) {
    54                     number++;
    55                     if (j < str.length() - 1) {
    56                         j++;// 判断下个数字前将j++
    57                     }
    58                     break;
    59                 } else {
    60                     if (number >= 2) {
    61                         break;
    62                     } else {
    63                         number = 0;// 若仅遇到1位数字相同,在遇到不同数字时,将number置0
    64                     }
    65                 }
    66             }
    67             if (number >= 2 && str.charAt(i + 1) != str.charAt(j)) {// 当相同数字已大于2后,遇到不同数字立即退出循环,打印子串
    68                 index = i + 1;
    69                 break;
    70             }
    71         }
    72         if (number >= 2) {
    73             System.out.println("存在,字串为:" + str.substring(index - number, index));
    74         }
    75     }
    76 
    77     public static void main(String arg[]) {
    78         ChildStr cs = new ChildStr();
    79         cs.input();
    80         cs.search();
    81     }
    82 }
  • 相关阅读:
    MySQL客户端管理
    Windows10安装Pytorch环境要点
    使用ssh加密github通信
    JVM 对象状态判断01
    并发之AbstractQueuedLongSynchronize----AQS
    关于CountDownLatch控制线程的执行顺序
    关于线程执行顺序的问题
    并发之Striped64(l累加器)
    并发之线程以及线程的中断状态
    1 JPA入门----项目搭建以及CRUD
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5642632.html
Copyright © 2011-2022 走看看