标签:result 子串 存储结构 动归 append 回文 uil int equal
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;
}
}
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
s1 += "world";
1>String 具有不可变性,后两个均可变
2>StringBuffer线程安全,效率比StringBuilder稍稍低,但是比String要高
3>底层存储结构都是char[]
length()/charAt()/equals()/startsWith()/endsWith()
contains()/indexOf()
1.构造器
String s="Hello";
StringBuffer str=new StringBuffer(s);
2.append
String s="Hello";
StringBuffer str=new StringBuffer();
str.append(s)
1.构造器
StringBuffer str=new StringBuffer("java");
String s=new String(str);
2.toString方法
StringBuffer str=new StringBuffer("java");
String s=str.toString();
标签:result 子串 存储结构 动归 append 回文 uil int equal
原文地址:https://www.cnblogs.com/franksimon/p/14957880.html