1.无重复字符的最长子串
Java解法
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() <= 1) {
return s.length();
}
Map<Character, Integer> record = new HashMap<>();
int left = 0;
int maxLength = 0;
for (int right = 0; right < s.length(); right++) {
Character c = s.charAt(right);
if (record.containsKey(c) && record.get(c) >= left) {
left = record.get(c) + 1;
}
record.put(c, right);
maxLength = Math.max(maxLength, right - left + 1);
}
return maxLength;
}
}
Golang解法
func lengthOfLongestSubstring(s string) int {
if len(s) <= 1 {
return len(s)
}
record := make(map[rune]int)
left := 0
maxLength := 0
for right, v := range s {
if index, ok := record[v]; ok{
if index >= left {
left = index + 1
}
}
record[v] = right
if maxLength < (right - left + 1) {
maxLength = right - left + 1
}
}
return maxLength
}
2.找到字符串中所有字母异位词
Java解法
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> result = new ArrayList<>();
if (p.length() > s.length()) {
return result;
}
char[] pCharsArray = p.toCharArray();
Arrays.sort(pCharsArray);
String pSorted = new String(pCharsArray);
for (int i = 0; i <= s.length() - p.length(); i++) {
String s1 = s.substring(i, i + p.length());
char[] s1CharsArray = s1.toCharArray();
Arrays.sort(s1CharsArray);
if (pSorted.equals(new String(s1CharsArray))) {
result.add(i);
}
}
return result;
}
}
Golang解法(leetcode提示超时)
func findAnagrams(s string, p string) []int {
var result []int
if len(p) > len(s) {
return result
}
pCharSlice := []rune(p)
sort.Slice(pCharSlice, func(i, j int) bool {
return pCharSlice[i] < pCharSlice[j]
})
pSorted := string(pCharSlice)
for i := 0; i <= len(s) -len(p); i++ {
subString := s[i : i + len(p)]
subCharSlice := []rune(subString)
sort.Slice(subCharSlice, func(i, j int) bool {
return subCharSlice[i] < subCharSlice[j]
})
if pSorted == string(subCharSlice) {
result = append(result, i)
}
}
return result
}