2021-08-16:回文对。给定一组 互不相同 的单词, 找出所有 不同 的索引对 (i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。

福大大 答案2021-08-16:

k是字符串长度。
1.依次遍历,嵌套循环。
时间复杂度:O((N^2)k)
2.b逆序+a+b,a+b+a逆序。注意去重。
时间复杂度:O(N
(k^2))。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
words := []string{"bat", "tab", "cat"}
ret := palindromePairs(words)
fmt.Println(ret)
} func palindromePairs(words []string) [][]int {
wordset := make(map[string]int)
for i := 0; i < len(words); i++ {
wordset[words[i]] = i
}
res := make([][]int, 0)
//{ [6,23] 、 [7,13] }
for i := 0; i < len(words); i++ {
// i words[i]
// findAll(字符串,在i位置,wordset) 返回所有生成的结果返回
findRet := findAll(words[i], i, wordset)
res = append(res, findRet...)
}
return res
} func findAll(word string, index int, words map[string]int) [][]int {
res := make([][]int, 0)
reverse := reverse(word)
rest, ok := words[""]
if ok && rest != index && word == reverse {
addRecord(&res, rest, index)
addRecord(&res, index, rest)
}
rs := manacherss(word)
mid := len(rs) >> 1
for i := 1; i < mid; i++ {
if i-rs[i] == -1 {
ok2 := false
rest, ok2 = words[reverse[0:mid-i]]
if ok2 && rest != index {
addRecord(&res, rest, index)
}
}
}
for i := mid + 1; i < len(rs); i++ {
if i+rs[i] == len(rs) {
ok3 := false
aaa := reverse[(mid<<1)-i:]
rest, ok3 = words[aaa]
if ok3 && rest != index {
addRecord(&res, index, rest)
}
}
}
return res
} func addRecord(res *[][]int, left int, right int) {
newr := make([]int, 0)
newr = append(newr, left)
newr = append(newr, right)
*res = append(*res, newr)
} func manacherss(word string) []int {
mchs := manachercs(word)
rs := make([]int, len(mchs))
center := -1
pr := -1
for i := 0; i != len(mchs); i++ {
if pr > i {
rs[i] = getMin(rs[center<<1-i], pr-i)
} else {
rs[i] = 1
}
for i+rs[i] < len(mchs) && i-rs[i] > -1 {
if mchs[i+rs[i]] != mchs[i-rs[i]] {
break
}
rs[i]++
}
if i+rs[i] > pr {
pr = i + rs[i]
center = i
}
}
return rs
} func getMin(a int, b int) int {
if a < b {
return a
} else {
return b
}
} func twoSelectOne(c bool, a int, b int) int {
if c {
return a
} else {
return b
}
} func manachercs(word string) string {
chs := []byte(word)
mchs := make([]byte, len(chs)*2+1)
index := 0
for i := 0; i != len(mchs); i++ {
if (i & 1) == 0 {
mchs[i] = '#'
} else {
mchs[i] = chs[index]
index++
}
}
return string(mchs)
} func reverse(str string) string {
chs := []byte(str)
l := 0
r := len(chs) - 1
for l < r {
tmp := chs[l]
chs[l] = chs[r]
l++
chs[r] = tmp
r--
}
return string(chs)
}

执行结果如下:


左神java代码

2021-08-16:回文对。给定一组 互不相同 的单词, 找出所有 不同 的索引对 (i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。的更多相关文章

  1. 2021.08.16 P1078 文化之旅(最短路)

    2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...

  2. 2021.08.16 P1260 工程规划(差分约束)

    2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...

  3. 2021.08.16 P1300 城市街道交通费系统(dfs)

    2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ...

  4. 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)

    2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...

  5. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  6. Leetcode30--->Substring with Concatenation of All Words(主串中找出连接给定所有单词的子串的位置)

    题目:给定一个字符串S(主串),一个字符串数组words,其中的字符串的长度相同.找到所有的子串位置,要求是words中字符串的一个连接: 举例: For example, given:s: &quo ...

  7. [leetcode]131. Palindrome Partitioning字符串分割成回文子串

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  8. Extend to Palindrome UVA - 11475(补成回文串)

    题意: 就是用最少的字符把原字符串补成回文串 解析: emm/.../网上都是用kmp和后缀数组做的 我没想到这俩的思路...emmm... 想到了exkmp的  就是原串和逆串匹配一下  注意要保证 ...

  9. 完美的代价(swap成回文串、贪心)

    Description 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的. 现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串 ...

  10. 使用Spire PDF for .NET将HTML转换成PDF文档

    目录 开发环境说明 Spire PDF for .NET (free edition)体验 资源下载 开发环境说明 Microsoft Visual Studio 2013 Ultimate Edit ...

随机推荐

  1. Constant width to height ratio

    <div class="constant-width-to-height-ratio"></div> .constant-width-to-height-r ...

  2. 在教学中常被问到的几个vue3.x与typescript的问题,统一解答

    在教学当中,学生在学习vue3.x时,常常会问到typescript和vue3.x之间的关系,感觉这两个技术总是绑在一起的,下面老赵来统一解答一下: 那学vue3.x,为什么要求也要掌握typescr ...

  3. 《程序员的自我修养》学习笔记——ELF 文件结构介绍【第二弹】

    ELF 文件结构介绍 文件头 以 ELF 文件64位版本为例: e_ident [ELF魔数 16byte] 1-4字节:ELF 文件都必须相同的标识码,分别为 0x7F,0x45,0x4C,0x46 ...

  4. ovs-dpdk:revalidator源码解析

    revalidator是做什么的?需要知道哪些东西? 有关于revalidator需要弄明白的是以下三个问题: 通过ovs-vsctl list open_vs可以看到other_config里面有两 ...

  5. Python学习之爬虫

    又被老师要求去搞Python ,曰,,下午回顾了一下Python的基础知识,写了个爬取图片的程序,在此做个分享吧.不喜勿喷 import requests import time from bs4 i ...

  6. 可靠消息最终一致性【本地消息表、RocketMQ 事务消息方案】

    更多内容,前往IT-BLOG 一.可靠消息最终一致性事务概述 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能够接收消息并处理事务成功,此方案强调 ...

  7. C++/Qt网络通讯模块设计与实现(六)

    前面章节主要讲述网络通讯客户端的实现,各位小伙伴需认真阅读以及理解,理会其中的思想,有疑问的地方可及时给我私信,我都会非常认真地解答大家的疑惑. C++/Qt网络通讯模块设计与实现(一) C++/Qt ...

  8. blender资源库 【自用】

    1 https://www.threedscans.com A Website with a lot of photo-scanned sculptures which are free to use ...

  9. python入门教程之八列表,字典,字符串,集合常用操作

    一列表常用方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表元素最大值 4 mi ...

  10. pandas这dataframe结构

    认识DataFrame结构 DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以 ...