GoLang刷题之leetcode

题目30:串联所有单词的子串

题目描述:

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。

s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。

例如,如果 words = ["ab","cd","ef"], 那么 "abcdef", "abefcd","cdabef", "cdefab","efabcd", 和 "efcdab" 都是串联子串。 "acdbef" 不是串联子串,因为他不是任何 words 排列的连接。

返回所有串联子串在 s 中的开始索引。你可以以 任意顺序 返回答案。

题解:

go 复制代码
func findSubstring(s string, words []string) []int {
    res := []int{}
    sl := len(s)                   //字符串长度
    wl := len(words[0])         //words单个字符串长度
    wsl := wl * len(words)   //words总长度
    if sl < wsl{
        return res
    }
    countmap := make(map[string]int) //存放words中各字符串出现次数
    for _, w := range words{
        countmap[w]++
    }
    for i:=0;i<=sl - wsl;i++{
        tmp := make(map[string]int)
        for _, w1 := range words{
            tmp[w1]++
        }
        num := 0 //记录某个字符串已经出现的次数
        for num < len(words){
            word := s[i+num*wl:i+(num+1)*wl]
            _,wordcount := tmp[word]
             if wordcount{
                tmp[word]--
                if tmp[word]<0{
                    break
                }
            }else{
                break
            }
            num++
        }
        if num == len(words){
            res = append(res,i)
        }
       
    }
    return res
}
相关推荐
꧁坚持很酷꧂2 分钟前
Qt天气预报系统设计界面布局第四部分左边
开发语言·qt
很楠不爱12 分钟前
Qt——系统相关
开发语言·qt
张敬之、16 分钟前
Ribbon源码分析
java·开发语言
十月雨眠22 分钟前
使用three.js 实现vr全景图展示,复制即可用
开发语言·javascript
yonuyeung1 小时前
代码随想录算法【Day7】
算法·leetcode·哈希算法
天桥下的卖艺者1 小时前
R语言6种将字符转成数字的方法,写在新年来临之际
开发语言·r语言
海风极客1 小时前
文件传输工具FTransferor<优化篇>
开发语言·后端·golang·编程思维
tmacfrank1 小时前
Kotlin 协程基础知识总结七 —— Flow 与 Jetpack Paging3
android·开发语言·kotlin
EasyNTS1 小时前
EasyPlayer.js遇到播放RTMP视频时,画面显示异常是什么原因?
开发语言·javascript·音视频
信徒_2 小时前
Java 内存模型(Java Memory Model, JMM)
java·开发语言·junit