本文通过看一些别人的代码,来更新一下自己的JAVA知识库
一、不同子串问题:
【问题描述】
一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001 有多少个不同的非空子串?
import java.util.HashSet;
public class B不同字串 { // 100
public static void main(String[] args) {
HashSet set = new HashSet();
String str = "0100110001010001";
int N = str.length(); // 16
while (N > 0) { // 循环16次 N: 16 -> 1
int dis = str.length() - N + 1; // dis: 1 -> 16
for (int i = 0; i < N; i++) {
String ss = str.substring(i, i + dis); // 字串长度: 1 -> 16
set.add(ss);
}
N--;
}
System.out.println(set.size());
}
}
(1)java.util.HashSet 类实现Set接口,由哈希表支持,相信学过数据结构的人应该都了解哈希表,这里就不做过多介绍了。HashSet set = new HashSet();
(2)str.substring(i, i + dis)用于获取从第i到第i+dis位置的子字符串,包括起点,不包括终点。
(3)set.add(ss),此方法用来向 Set 集合添加对象。如果 Set 集合中已经包含相同的对象,则不改变 Set 集合。该方法返回值为 boolean 对象,如果 Set 集合中不包含要添加的对象,则添加对象并返回 true,否则返回 false。set.size(),用于获得该集合的大小。
JAVA中数组记得一定要创建,例如:
int[] path = new int[n + 1];
,有时候会使用C或C++的综合征,总会忘记先创建数组。
二、
记忆点:若求某个数的最后几位数字,取余即可,如求最后 4 位数字
arr[i] %= 10000;
三、
String aa;
for (int i1 = 1; i1 <= 673; i1++) {
aa = String.valueOf(i1);
if (aa.contains("2") || aa.contains("4"))
continue;
String.valueOf(i1),转换为字符串类型,且aa.contains("2")可直接判断字符串中是否有‘2’
四、确定在一个字符串word
中,某个字符串“Alice”
从pos1
开始时的位置:
poss1=word.indexOf("Alice",pos1);
五、输入一个整数后再输入字符串:
注意中间要加上语句
input.nextLine();
int K=input.nextInt();
input.nextLine();
String word=input.nextLine();
六、判断一个字符是否是字母或数字:
Character.isDigit( char ch ) // 判断ch是否是数字字符,如'1','2',是返回true。否则返回false
Character.isLowerCase(c) || Character.isUpperCase(c) // 判断ch是否是字母字符,如'a','b',是返回true。否则返回false
Character.isLetterOrDigit( char ch ) // 判断ch是否是字母或数字字符,如'a','b','1','2',是返回true。否则返回false
七
HashSet<String> set = new HashSet<String>();
for(String str: set)//遍历
{
System.out.println(str);
int len=str.length();
HashSet<String> set1=new HashSet<String>();
for(int i=0;i<len;i++)
{
String sss=str.substring(i,i+1);
set1.add(sss);
}
sum=sum+set1.size();
}
八
HashSet
清除用set.clear();
,看是否包含用boolean is = set.contains(str);
九
char[] arr1 = scan.nextLine().toCharArray();//toCharArray()变成字符数组
Arrays.fill(arr2, -1);//填充arr2数组中的每一个元素都是-1
十、求最大公约数(gcd)
public static int gcd(int a,int b)//Greatest Common Divisor
{
int n = 0;
while(b!=0)
{
n = a % b;
a = b;
b = n;
}
return a;
}