1、无重复字符的最长子串
个人解法:
HashSet+滑动窗口
class Solution {
public int lengthOfLongestSubstring(String s) {
Set hashset = new HashSet();
int ans = 0;
int index = 0;
while(index < s.length()){
int temp = index;
while(temp < s.length() && !hashset.contains(s.charAt(temp))){
hashset.add(s.charAt(temp));
ans = Math.max(ans,hashset.size());
temp++;
}
hashset.clear();
index++;
}
return ans;
}
}
2、最长回文子串
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() == 0) {
return "";
}
int strLen = s.length();
int left = 0;
int right = 0;
int len = 1;
int maxStart = 0;
int maxLen = 0;
for (int i = 0; i < strLen; i++) {
left = i - 1;
right = i + 1;
while (left >= 0 && s.charAt(left) == s.charAt(i)) {
len++;
left--;
}
while (right < strLen && s.charAt(right) == s.charAt(i)) {
len++;
right++;
}
while (left >= 0 && right < strLen && s.charAt(right) == s.charAt(left)) {
len = len + 2;
left--;
right++;
}
if (len > maxLen) {
maxLen = len;
maxStart = left;
}
len = 1;
}
//最后一次会使left多减一次,由于maxLen是由len决定的所以不涉及right多加一次,substring
//右边是开区间要+1
return s.substring(maxStart + 1, maxStart + maxLen + 1);
}
}