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. 【Airtest相关】收集一些Airtest的介绍

    1.项目简介 ui自动化一直是个让人头疼的事,主要是因为系统兼容性难度较大和开发维护成本比较高, 以前使用过appium,通用性比较差,并且开发有一定的基础才行,更难以忍受的是后期的维护成本:然后接触 ...

  2. Apache与tomcat区别--转水漫金山

    Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器 Ap ...

  3. JML

    1.JML规格设计策略 我三次作业采用的方法都是从性能与存储大小方面考虑.在满足规格的条件下尽量做到运行速度最快,所用空间最小.因为这个单元的作业如果单单只是照着jml规格来翻译的话就失去了意义(因为 ...

  4. windows下 mstsc 远程Ubuntu 图形界面

    安装及设置xrdp ------------------------------------------------------ touch ~/installXrdp.sh  cat > ~/ ...

  5. JavaWeb相关学习环境的配置(一)

    JavaWeb相关学习环境的配置(一) 之 JDK的配置 步骤: 1.去官网找到自己想要下载的版本: 官网地址:https://www.oracle.com/java/technologies/dow ...

  6. LoadRunner——分析图详解(十四)

    <分析图详解> 一.Running V user s 图 X轴表示运行所用的时间,Y轴表示vuser数, 显示在整个运行过程中随着时间的推移,虚拟用户数量是如何变化的,具体描述为:用户是如 ...

  7. DES & 3DES 简介 以及 C# 和 js 实现【加密知多少系列】

    〇.简介 1.DES 简介 DES 全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977 年被美国联邦政府的国家标准局确定为联邦资料处理标准( ...

  8. Prometheus Operator 与 kube-prometheus 之一-简介

    简介 Prometheus Operator Prometheus Operator: 在 Kubernetes 上管理 Prometheus 集群.该项目的目的是简化和自动化基于 Prometheu ...

  9. Spring Bean 的生命周期(详细解读)

    Spring Bean 的生命周期简单易懂.在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态.同样的,当一个 bean 不再被调用时需要进行相关的析构操作,并从 bean ...

  10. java 面向对象 --static

    java 面向对象 --static package charpter5.Demo09; //static public class Student { private static int age; ...