判断一个数字中是否包含两个相同的子串并输出

功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于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 }
时间: 2024-10-27 13:59:54

判断一个数字中是否包含两个相同的子串并输出的相关文章

js判断一个dom中是否包含另一个dom的方法

首先,比较原始(蠢)的方法 function isChildOf(child, parent) { if(child && parent) { let parentNode = child.parentNode; while(parentNode) { if(parent === parentNode) { return true; } parentNode = parentNode.parentNode; } } return false; } 这里 while 中判断其实在实际情况我们

判断一个字符串中是否包含另一个字符串(KMP、BF)

判断一个字符串是否是另一个字符串的子串,也就是strstr()函数的实现,简单的实现方法是BF算法. 1.BF算法 int BF(char *s, char *p){ if(s==NULL || p==NULL)return -1; int i=0; int j; while(i<strlen(s)){ j=0; while(s[i]==p[j] && j<strlen(p)){ i++; j++; } if(j==strlen(p))return i-j; i=i-j+1;

oracle判断一个字符串中是否包含另外一个字符串

select * from a where instr(a,b)>0; 用于实现B字段是A字段中的某一部分的时候,要论顺序或者要相邻的字符. 如果想要不论顺序或者不相邻的字符时,定义函数可以实现: select * from a where instr(a,b)>0; 这个只能实现B字段是A字段中的某一部分的时候. 如果想要不论顺序或者不相邻的字符时,定义函数可以实现 create or replace function checks(v_a varchar2,v_b varchar) ret

得到一个数字中每一位的数字

学习编程也有一段时间了,随着学习的不断深入,我越来越体会到了算法的重要性,最近遇到了一些非常有意思的算法,比如打印水仙花数.将数字逆置,在这两个算法中会用到一个数字钟每一位的值 如:判断数字123是否是水仙花数需要得到每一位的数字 通常计算每一位的数字的算法是: 个位:a = 123 % 10 = 3 十位:b  = 123 %100 / 10 = 2 百位::c = 123 % 100 = 2 随着位数的越来越大,这种方法满足不了程序的需求 比如计算:123445677777777777777

另一个SqlParameterCollection中已包含SqlParameter

一般情况下,我们定义的一个SqlParameter参数数组,如: SqlParameter[] parms =             {                new SqlParameter("@DateTime1", dtBegin),                new SqlParameter("@DateTime2", dtEnd)            }; 如果只给一个SqlCommand使用,这种情况的参数使用,不会出现异常,但如果该参数

判断一个数字是否为回文数

Determine whether an integer is a palindrome. Do this without extra space.(source) 判断一个数字是否为回文数,并且不使用额外的存储空间. "回文"是指正读反读都能读通的句子,那么回文数,就很容易理解,就是指一个数正反读的值是相同的.还有一个要求是不要使用额外的存储空间. Hints: 要将一个数的最高位与最低位比较,取出一个数的最低位容易(x%10),但要得到高位却很难. Solution 1: 首先得知

【EF框架】另一个 SqlParameterCollection 中已包含 SqlParameter。

查询报表的时候需要通过两次查询取出数据. 第一次,用count(*)查出总数: 第二次,用rownumber分页取出想要的页内容: 为了防止sql注入,使用SqlParameter来传递参数 List<SqlParameter> paramsList = new List<SqlParameter>(); //参数列表 paramsList.Add(new SqlParameter("@schSno", schSno));//校区 StringBuilder w

leecode---09---数字,取余整除---判断一个数字是否是回文

https://leetcode.com/problems/palindrome-number/description/ 题意 判断一个数字是否是回文 分析 32132132100 /100 删去0的部分 %100 留下0的部分 代码 class Solution { public boolean isPalindrome(int x) { if (x < 0) return false; //计算到x的最高位 int div = 1; while (div * 10 <= x) { div

Java判断一个字符串是否是包含某个字符

Java判断一个字符串是否是包含某个字符 在java中我们经常要判断一个字符串是否被包含在另外一个字符集中,那么如何用代码实现这个功能需求呢? contains方法 该方法返回true,如果此字符串包含,否则返回false. public class containString { public static void main(String[] args) { String str1 = "sdfsfsfa2we"; String str2 = "we"; Sys