第四天
无重复字符的最长子串
- 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
- 输入: s = "abcabcbb"
- 输出: 3
- 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> occ = new HashSet<Character>();
int answer=0;
int rightFrontier=-1;
for(int i = 0; i<s.length(); i++){
if(i!=0){//第一次,不需要删除窗口最左的位置
occ.remove(s.charAt(i-1));
}
while(rightFrontier<s.length()-1&&!occ.contains(s.charAt(rightFrontier+1))){
rightFrontier++;
occ.add(s.charAt(rightFrontier));//每次将所有的不重复串遍历结束
}
answer = Math.max(rightFrontier-i+1,answer);//保留最大值
}
return answer;
}
}
最长回文子串
-
给你一个字符串 s,找到 s 中最长的回文子串。
-
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。 -
遇到困难以及点评
对动归理解不透彻,不能及时想到。建议二刷 -
代码
class Solution {
public String longestPalindrome(String s) {
boolean[][] table = new boolean[s.length()][s.length()];
String result = "";
//遍历1
for(int i=0;i<table.length;i++){
table[i][i] = true;
result = s.substring(i, i+1);
}
//遍历2
for(int i = 0;i<table.length-1;i++){
if(s.charAt(i)==s.charAt(i+1)){
table[i][i+1] = true;
result = s.substring(i, i + 2);
}else{
table[i][i+1] = false;
}
result = s.substring(i, i+1);
}
// length > 2;
for (int len = 2; len < table.length; len++) {
for (int i = 0; i + len < table.length; i++) {
char front = s.charAt(i);
char end = s.charAt(i + len);
if (front == end) {
table[i][i + len] = table[i + 1][i + len - 1];
} else {
table[i][i + len] = false;
}
if(table[i][i + len]){
result = s.substring(i, i + len+1);//左闭右开
}
}
}
return result;
}
}
Java 小知识
1.画出代码的内容结构
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
s1 += "world";
2.如何理解String 不可变性
- 对数据修改均要在堆空间新造
3.String 是否可被继承
- 不可,因为声明为final
4.String StringBuffer StringBuilder 三者对比
1>String 具有不可变性,后两个均可变
2>StringBuffer线程安全,效率比StringBuilder稍稍低,但是比String要高
3>底层存储结构都是char[]
5.String 常用方法
length()/charAt()/equals()/startsWith()/endsWith()
contains()/indexOf()
6.String 转换 StringBuffer StringBuilder
String->StringBuffer StringBuilder()两个差不多
1.构造器
String s="Hello";
StringBuffer str=new StringBuffer(s);
2.append
String s="Hello";
StringBuffer str=new StringBuffer();
str.append(s)
StringBuffer StringBuilder()两个差不多->String
1.构造器
StringBuffer str=new StringBuffer("java");
String s=new String(str);
2.toString方法
StringBuffer str=new StringBuffer("java");
String s=str.toString();