Leetcode笔记

目录

String

String截取元素

1. String s = s.substring(beginIndex):截取从beginIndex至字符串末尾的字符串;
2. String s = s.substring(beginIndex,endIndex):截取从beginIndex至endindex-1的字符串;

数字转字符串

String s = String.valueOf(i);

String s = i + “”;

字符数组转字符串

String s = String.valueOf(charArray)

字符串转字符数组

char[] charArray = string.toCharArray();

以.切割字符串

String[] strs = s.split("\\.");

字符串转数字

int i = Integer.parseInt(s)

删除字符串的头尾空白符

s = s.trim();

StringBuilder转String

String s = stringBuilder.toString();

字符串比较大小

// public boolean equals(Object anObject):字符序列相等返回true,否则false
boolean judge = str1.equals(str2);
// public boolean equalsIgnoreCase(String anotherString):忽略大小写字符序列相等返回true,否则false
boolean judge = str1.equalsIgnoreCase(str2);
// public int compareTo(String anotherString):按字典顺序比较两个字符串,如果String对象按字典顺序排列在参数字符串之前,结果为负整数,如果在之后结果为正整数;如果两字符串相等,结果为0
int judge = str1.compareTo(str2);

测试字符串是否以指定前缀开头/后缀结尾

// 测试此字符串是否以指定的前缀开头
public boolean startsWith(String prefix)
// 测试在指定索引处开始的此字符串的子字符串是否以指定的前缀开头
public boolean startsWith(String prefix, int offset)
// 测试此字符串是否以指定的后缀结尾
public boolean endsWith(String suffix)

返回指定字符在字符串中第一次出现的索引

int indexOf(String str): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回-1int indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回-1

StringBuilder

StringBuider删除对应索引位置的元素

StringBuider.deleteCharAt(index)

StringBuider添加元素

StringBuider.append(element)

StringBuider获取长度

StringBuider.length()

创建StringBuilder时添加元素

StringBuilder res = new StringBuilder("[");

char

char转大小写

//转大写
char c = Character.toUpperCase(c);
//转小写
char c = Character.toLowerCase(c);

判断char是否是数字

boolean judge = Character.isDigit(c);

char转int

int i = Integer.parseInt(c + "");

数据类型转换

数据类型范围从小到大:自动转换

System.out.println(1024);// 一个整数,默认int类型
System.out.println(3.14);// 一个浮点数,默认double类型
// int --> long,符合数据范围从小到大的要求;
long num1 = 100;
System.out.println(num1);// 100
// float --> double,符合从小到大的要求;
double num2 = 2.5F;
System.out.println(num2);// 2.5
// long --> float,由于float范围更大,符合从小到大的规则;
float num3 = 30L;
System.out.println(num3);// 30.0

数据类型范围从大到小:强制类型转换(显式)

// 需要强制类型转换。
int num = (int) 100L;
System.out.println(num);//100

// 假设从大到小不进行强制类型转换
// int num = 100L;
// System.out.println(num);//报错:从long转换到int可能会有损失
  • 数据类型范围从小到大:byte、short、char --> int --> long --> float --> double,其中byte、short、char在运算时自动提升为int;
  • boolean类型不能发生数据类型转换;

int和char自动转换

int i = 'a' + 1;
System.out.println(i);
char c = 'a' + 1;
System.out.println(c);
98
b

Array

新建Array

// 1 动态初始化(指定长度)
String[] aArray = new String[5];
// 2 静态初始化的标准格式(指定内容,不可以指定长度,自动推算长度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
KMP算法是一种字符串匹配算法,用于在一个文本串S内查找一个模式串P的出现位置。它的时间复杂度为O(n+m),其中n为文本串的长度,m为模式串的长度。 KMP算法的核心思想是利用已知信息来避免不必要的字符比较。具体来说,它维护一个next数组,其中next[i]表示当第i个字符匹配失败时,下一次匹配应该从模式串的第next[i]个字符开始。 我们可以通过一个简单的例子来理解KMP算法的思想。假设文本串为S="ababababca",模式串为P="abababca",我们想要在S中查找P的出现位置。 首先,我们可以将P的每个前缀和后缀进行比较,得到next数组: | i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | --- | - | - | - | - | - | - | - | - | | P | a | b | a | b | a | b | c | a | | next| 0 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 接下来,我们从S的第一个字符开始匹配P。当S的第七个字符和P的第七个字符匹配失败时,我们可以利用next[6]=4,将P向右移动4个字符,使得P的第五个字符与S的第七个字符对齐。此时,我们可以发现P的前五个字符和S的前五个字符已经匹配成功了。因此,我们可以继续从S的第六个字符开始匹配P。 当S的第十个字符和P的第八个字符匹配失败时,我们可以利用next[7]=1,将P向右移动一个字符,使得P的第一个字符和S的第十个字符对齐。此时,我们可以发现P的前一个字符和S的第十个字符已经匹配成功了。因此,我们可以继续从S的第十一个字符开始匹配P。 最终,我们可以发现P出现在S的第二个位置。 下面是KMP算法的C++代码实现:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值