1.java中的 charAt 方法
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1
代码
ublic class Test {
public static void main(String args[]) {
String s = "www.runoob.com";
char result = s.charAt(8);
System.out.println(result);
}
}
//以上程序执行结果为:
o
2.KMP
代码实现
import java.lang.reflect.Array;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
int[] aaaas = kepNext("AAAB");
System.out.println(Arrays.toString(aaaas));
// System.out.println(Arrays.toString(aaaas));
String st = "AAC BBCCDCAACDAACDE";
String st1 = "AAAB";
//jg
int km = kmpSearch(st, st1, aaaas);
System.out.println(km);
}
public static int kmpSearch(String st, String st1, int[] next) {
for (int i = 0, j = 0; i < st.length(); i++) {
while (j > 0 && st.charAt(i) != st1.charAt(j))
j = next[j - 1];
//从这个 j的位置开始匹配
// j 为负数的时候不执行 直到下一次
// if (st.charAt(i) == st1.charAt(j)) 使得j++
if (st.charAt(i) == st1.charAt(j)) {
j++;
}
if (st1.length() == j) {
return i + 1 - j;
}
}
return -1;
}
// 获取一个部分匹配表
public static int[] kepNext(String areas) {
//创建一个next 数组
int[] next = new int[areas.length()];
next[0] = 0;
// 匹配值j加1
for (int i = 1, j = 0; i < areas.length(); i++) {
// 核心算法
// 非常重要 直到 j = 0 && areas.charAt(i) == areas.charAt(j)
//成立 才能退出while 循环
//
while (j > 0 && areas.charAt(i) != areas.charAt(j)) {
j = next[j - 1];
//如果只循环一次 例如重复的AA 在下一次 由2 变成 1
}
if (areas.charAt(i) == areas.charAt(j)) {
j++;
}
next[i] = j;
}
return next;
}
}
3.KMP 算法思想
此方法也可生产next数组
void GetNext(char* p,int next[])
{
int pLen = strlen(p);
next[0] = -1;
int k = -1;
int j = 0;
while (j < pLen - 1)
{
//p[k]表示前缀,p[j]表示后缀
if (k == -1 || p[j] == p[k])
{
++k;
++j;
next[j] = k;
}
else
{
k = next[k];
}
}
}
4,BM算法
5.Sunday算法
6.查找数组的重复数
#//先排序后查找
import java.util.Arrays;
public class Demo10 {
public static void main(String[] args) {
int array[] = {1, 4, 6, 7, 8, 9, 5, 6, 7, 90, 99};
Arrays.sort(array);//这个方法是用来排序的
System.out.println(Arrays.toString(array));
for (int i = 1; i < array.length; i++) {
if (array[i] ==array[i-1]){
System.out.println(array[i]);
}
else {
}
}
}
}
使用集合
mport java.util.HashSet;
public class Demo11 {
public static void main(String[] args) {
int [] array ={1,3,4,6,9,9,56,7,56,44,22,89,90 };
HashSet objects = new HashSet<>();
//HashSet 不能储存相同的对象
int lon = array.length;
for (int i = 0; i < lon; i++) {
if (!objects.add(array[i])){
System.out.println(array[i]);
}else {}
}
}
}