【JAVA】代码部分知识点记录

本文通过看一些别人的代码,来更新一下自己的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;  

 }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。