leetcode336. 回文对(字典树)

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

示例 1:

输入:[“abcd”,“dcba”,“lls”,“s”,“sssll”]
输出:[[0,1],[1,0],[3,2],[2,4]]
解释:可拼接成的回文串为 [“dcbaabcd”,“abcddcba”,“slls”,“llssssll”]

代码

class Solution {class node{int[] next=new int[26];int flag;public  node(){flag=-1;}}ArrayList<node> tree=new ArrayList<>();public void insert(String s,int id){int n=s.length(),cur=0;for(int i=0;i<n;i++){int t=s.charAt(i)-'a';if(tree.get(cur).next[t]==0)//不存在就新建{tree.add(new node());tree.get(cur).next[t]=tree.size()-1;}cur=tree.get(cur).next[t];//迭代}tree.get(cur).flag=id;//给最后一个字符加上id}public int search(String s,int l,int r){int cur=0;for(int i=r;i>=l;i--){int t=s.charAt(i)-'a';if(tree.get(cur).next[t]==0)//找不到return -1;cur=tree.get(cur).next[t];}return tree.get(cur).flag;//返回字符串结尾的标志}public boolean isPa(String s,int l,int r)//判断回文串{int len=r-l+1;for(int i=0;i<len/2;i++){if(s.charAt(l+i)!=s.charAt(r-i))return false;}return true;}public List<List<Integer>> palindromePairs(String[] words) {tree.add(new node());List<List<Integer>> res=new ArrayList<>();int n=words.length;for(int i=0;i<n;i++)insert(words[i],i);for(int i=0;i<n;i++){int m=words[i].length();for(int j=0;j<=m;j++)//搜索符合条件的字符串{if(isPa(words[i],j,m-1))//字符串的右部分回文,需要补上与左部分对称的回文字符串{int fl=search(words[i],0,j-1);if(fl!=-1&&fl!=i)//找到了符合的字符串{res.add(Arrays.asList(i,fl));}}if(j>0&&isPa(words[i],0,j-1)){int fr=search(words[i],j,m-1);if(fr!=-1&&fr!=i){res.add(Arrays.asList(fr,i));}}}}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html文档 字符引用,【转】HTML中常见形如#number;的东西叫做 字符实体引用,简称引用,代表一个对应的unicode字符...

【转】HTML中常见形如number;的东西叫做 字符实体引用&#xff0c;简称引用&#xff0c;代表一个对应的unicode字符英文解释的很清楚&#xff0c;就不翻译了&#xff0c;自己看&#xff1a;EntitiesCharacter entity references, or entities for short, provide a method of e…

终端打开后-bash_如何爵士化Bash终端-带有图片的分步指南

终端打开后-bashby rajaraodv通过rajaraodv In this blog I’ll go over the steps to add Themes, Powerline, fonts, and powerline-gitstatus to make your regular Bash Terminal look beautiful and useful as shown in the picture above.在此博客中&#xff0c;我将介绍…

如何获取元素在父级div里的位置_关于元素的浮动你了解多少

首先&#xff0c;在介绍什么是浮动之前我们先介绍一下html中元素的普通流布局方式。在普通流中&#xff0c;元素是按照它在 HTML 中的出现的先后顺序自上而下依次排列布局的&#xff0c;在排列过程中所有的行内元素水平排列&#xff0c;直到当行被占满然后换行&#xff0c;块级…

获取iOS顶部状态栏和Navigation的高度

状态栏的高度 20 [[UIApplication sharedApplication] statusBarFrame].size.height Navigation的高度 44 self.navigationController.navigationBar.frame.size.height 加起来一共是64 转载于:https://www.cnblogs.com/Free-Thinker/p/6478715.html

Java电商项目-5.内容管理cms系统

目录 实现加载内容分类树功能实现内容分类动态添加删除内容分类节点实现内容分类节点的分页显示实现广告内容的添加实现广告内容删除实现广告内容编辑到Github获取源码请点击此处实现加载内容分类树功能 注: 往后将不在说编写远程服务方法和编写web模块等重复语句, 直接用"…

leetcode738. 单调递增的数字(贪心)

给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff09; 示例 1: 输入: …

MySQL purge 线程

MySQL中purge线程知识&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.htmlInnoDB中delete所做删除只是标记为删除的状态&#xff0c;实际上并没有删除掉&#xff0c;因为MVCC机制的存在&#xff0c;要保留之前的版本为并发所使用。最终…

安装inde.html使用babel,reactjs – 使用Babel Standalone进行单个React组件渲染,仅使用index.html和Component...

Noob与React在这里.我正在玩React.我有一个简单的组件在我的component.js中呈现.它包含在我的index.html文件中.我在头部包含了React,ReactDOM和babel的脚本.我只想看到一个div正确渲染.我还没有使用Node,只是使用React和Babel(使用babel-standalone).我正在使用一个简单的http…

软件工程师转正申请_这是申请软件工程师工作的4种最佳方法-以及如何使用它们。...

软件工程师转正申请by YK Sugi由YK Sugi 这是适用于软件工程师工作的最佳方法&#xff0c;以及确切的使用方法。 (Here are the best methods for applying to software engineer jobs — and exactly how to use them.) When people think of applying for jobs, they often …

【JS新手教程】LODOP打印复选框选中的任务或页数

之前的博文&#xff1a;【JS新手教程】LODOP打印复选框选中的内容关于任务&#xff1a;Lodop打印语句最基本结构介绍&#xff08;什么是一个任务&#xff09;关于本文用到的JS的eval方法&#xff1a;JS-JAVASCRIPT的eval()方法该文用的是不同checkbox&#xff0c;对应不同的val…

查询范围_企二哥:查询企业经营范围的三种方法

一、查询企业经营范围的三种方法1. 进经营地的工商局网站,有个“全国企业信用信息公示系统”进去后输入公司名称搜索就出来了。2. 有个软件叫做天眼查&#xff0c;打开天眼查输入要查询的公司名称&#xff0c;就可以搜出来了。不光是经营范围&#xff0c;还有许多和企业相关的资…

C#用DataTable实现Group by数据统计

http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1、用两层循环计算&#xff0c;前提条件是数据已经按分组的列排好序的。 DataTable dt new DataTable();dt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)), …

CI框架取消index.php

首先看文档&#xff1a; http://codeigniter.org.cn/user_guide/general/urls.html#url-index-php 大致意思是&#xff0c;先Apache开启rewrite&#xff0c;再index.php同级目录下创建一个.htaccess文件 设置好后还是不起作用&#xff01;&#xff01;&#xff01;&#xff01;…

电子工程师自学成才pdf_给新开发人员的最佳建议:自学成才的软件工程师的建议...

电子工程师自学成才pdfby Ali Spittel通过Ali Spittel 给新开发人员的最佳建议&#xff1a;自学成才的软件工程师的建议 (My best tips for new developers: advice from a (mostly) self-taught software engineer) The most common question I get from blog readers is “W…

leetcode1090. 受标签影响的最大值(贪心算法)

我们有一个项的集合&#xff0c;其中第 i 项的值为 values[i]&#xff0c;标签为 labels[i]。 我们从这些项中选出一个子集 S&#xff0c;这样一来&#xff1a; |S| < num_wanted 对于任意的标签 L&#xff0c;子集 S 中标签为 L 的项的数目总满足 < use_limit。 返回子…

html显示hdf5文件,python读取hdf5文件

python怎样读取hdf5文件python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片。Windows环境下给Python安装h5py失败&#xff0c;HDF5已经安装使用pip install h5py命令安装已经安装了HDF5-1.10.0-win64.msi3第一张图上说的是,“不能打开头文件hd…

课后练习----实现窗口的切换

1、运用事件处理相关知识&#xff0c;完成两个窗口之间的切换&#xff0c;例如&#xff1a;登陆窗口------》注册窗口 package Date; import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing…

Hello 云栖

这是第一篇博客

ai物联网工业_人工智能和物联网将如何改变行业

ai物联网工业by Mariya Yao姚iya(Mariya Yao) 人工智能和物联网将如何改变行业 (How Artificial Intelligence & the Internet of Things will transform industries) 微软首席技术官凯文斯科特(Kevin Scott)访谈 (An interview with Microsoft CTO Kevin Scott) As part …

20145206邹京儒《网络对抗》逆向及Bof基础实践

20145206邹京儒《网络对抗》逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c…