本文通過看一些別人的代碼员辩,來更新一下自己的JAVA知識(shí)庫
一沐祷、不同子串問題:
【問題描述】
一個(gè)字符串的非空子串是指字符串中長度至少為 1 的連續(xù)的一段字符組成的串。例如绸狐,字符串a(chǎn)aab 有非空子串a(chǎn), b, aa, ab, aaa, aab, aaab谎碍,一共 7 個(gè)鳞滨。注意在計(jì)算時(shí),只算本質(zhì)不同的串的個(gè)數(shù)蟆淀。
請(qǐng)問拯啦,字符串0100110001010001 有多少個(gè)不同的非空子串?
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) { // 循環(huán)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 類實(shí)現(xiàn)Set接口熔任,由哈希表支持,相信學(xué)過數(shù)據(jù)結(jié)構(gòu)的人應(yīng)該都了解哈希表褒链,這里就不做過多介紹了。HashSet set = new HashSet();
(2)str.substring(i, i + dis)用于獲取從第i到第i+dis位置的子字符串疑苔,包括起點(diǎn)甫匹,不包括終點(diǎn)。
(3)set.add(ss)夯巷,此方法用來向 Set 集合添加對(duì)象赛惩。如果 Set 集合中已經(jīng)包含相同的對(duì)象,則不改變 Set 集合趁餐。該方法返回值為 boolean 對(duì)象喷兼,如果 Set 集合中不包含要添加的對(duì)象,則添加對(duì)象并返回 true后雷,否則返回 false季惯。set.size(),用于獲得該集合的大小。
JAVA中數(shù)組記得一定要?jiǎng)?chuàng)建臀突,例如:
int[] path = new int[n + 1];
勉抓,有時(shí)候會(huì)使用C或C++的綜合征,總會(huì)忘記先創(chuàng)建數(shù)組候学。
二藕筋、
記憶點(diǎn):若求某個(gè)數(shù)的最后幾位數(shù)字,取余即可梳码,如求最后 4 位數(shù)字
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),轉(zhuǎn)換為字符串類型掰茶,且aa.contains("2")可直接判斷字符串中是否有‘2’
四暇藏、確定在一個(gè)字符串word
中,某個(gè)字符串“Alice”
從pos1
開始時(shí)的位置:
poss1=word.indexOf("Alice",pos1);
五濒蒋、輸入一個(gè)整數(shù)后再輸入字符串:
注意中間要加上語句
input.nextLine();
int K=input.nextInt();
input.nextLine();
String word=input.nextLine();
六盐碱、判斷一個(gè)字符是否是字母或數(shù)字:
Character.isDigit( char ch ) // 判斷ch是否是數(shù)字字符,如'1','2'瓮顽,是返回true县好。否則返回false
Character.isLowerCase(c) || Character.isUpperCase(c) // 判斷ch是否是字母字符,如'a'趣倾,'b'聘惦,是返回true。否則返回false
Character.isLetterOrDigit( char ch ) // 判斷ch是否是字母或數(shù)字字符儒恋,如'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()變成字符數(shù)組
Arrays.fill(arr2, -1);//填充arr2數(shù)組中的每一個(gè)元素都是-1
十剂跟、求最大公約數(shù)(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;
}