55
力扣https://leetcode-cn.com/problems/M1oyTv/
思路
最短子字符串,没有要求连续,最重要的就是要搞定滑动窗口的定义
func minWindow(s string, t string) string {
n := len(s)
var cntS [128]int
var cntT [128]int
var cnt int
res := s + "#"
//获取t字符串字符的数目
for _, c := range t {
cntS[c]++
cntT[c]++
}
//获取t字符串中不相同字符的数目
for _, c := range cntS {
if c > 0 {
cnt++
}
}
l := 0
r := 0
//设置滑动窗口
for r < n {
cntS[s[r]]--
if cntT[s[r]] > 0 && cntS[s[r]] == 0 {
//如果是子字符串t的字符且在s中已经为0,说明有一个字符已经被窗口包含了
cnt--
}
for cnt == 0 {
//当cnt==0,说明滑动窗口l-r包含了子子符串所有,获取结果
if len(res) > r-l+1 {
res = s[l : r+1]
}
if cntT[s[l]] > 0 && cntS[s[l]] == 0 {
//准备向前滑动滑动窗口
//若是s[l]是子字符串的值则说明滑动窗口还需要滑动
cnt++
}
//将之前减去的加上start向前滑动1
cntS[s[l]]++
l++
}
//end向前滑动
r++
}
if len(res) > n {
res = ""
}
return res
}
56
nullhttps://leetcode-cn.com/problems/XltzEq/
思路
双指针
func isPalindrome(s string) bool {
usefull:=make(map[uint8]bool)
//数字
for i:=0;i<10;i++{
num:=strconv.Itoa(i)
usefull[num[0]] = true
}
for i:=97;i<=122;i++{
usefull[uint8(i)] = true
}
for i:=65;i<=90;i++{
usefull[uint8(i)] = true
}
start:=0
end:=len(s)-1
for start<end{
for start<end&&usefull[s[start]]!=true{
start++
}
for end>0&&usefull[s[end]]!=true{
end--
}
if start>end{
break
}
tmps:=s[start]
tmpe:=s[end]
if tmpe>=97{
tmpe = tmpe - 32
}
if tmps>=97{
tmps = tmps -32
}
if tmpe!=tmps{
return false
}
start++
end--
}
return true
}
57
力扣https://leetcode-cn.com/problems/RQku0D/
func innerValidPalindrome(s string)bool{
if len(s)==1{
return false
}
var start,end int
end = len(s) - 1
for start < end{
if s[start] != s[end]{
return false
}
start++
end--
}
return true
}
//双指针
func validPalindrome(s string) bool {
var start,end int
end = len(s) - 1
for start < end{
if s[start] != s[end]{
if end-start<=1{
return true
}
return innerValidPalindrome(s[start+1:end+1])||innerValidPalindrome(s[start:end])
}
start++
end--
}
return true
}
58
力扣https://leetcode-cn.com/problems/a7VOhD/
func countIsPalindrome(str string)bool{
var start,end int
end = len(str) - 1
for start<end{
if str[start]!=str[end]{
return false
}
start++
end--
}
return true
}
func countSubstrings(s string) int {
var count int
for i:=0;i<len(s);i++{
for j:=i+1;j<len(s);j++{
if countIsPalindrome(s[i:j+1]){
count++
}
}
}
count = count + len(s)
return count
}