214. Shortest Palindrome

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了214. Shortest Palindrome相关的知识,希望对你有一定的参考价值。

一、题目

  1、审题

  技术分享图片

  2、分析

    给出一个字符串,在此字符串前边添加字符,使得其成为一个回文,求添加最少字符后,所形成的回文。

 

二、解答

  1、思路:

    ①、为了处理回文字符数为奇数和偶数的问题,先在字符串 s 的每一个字符之间插入字符 ‘#‘,并将每个字符放入一个 List 中

    ②、下标 index 依次从 1 到 mid,定义两个指针 left = index - 1、right = index + 1;

      比较 left 、right 所指元素是否相等,若不相等,则 index 向后移动,若相等,则 left、right相反移动,直到 left < 0,此时,即为以 index 为中心,形成的字符串为回文。记录最大的回文中心的字符下标 index

    ③、将 ②所求得的最大 index 为中心的字符串所不包含的 s 的后部分子字符串逆序插入一个 StringBuilder 中,并将 s 插入 此 StringBuilder 中,返回。

 1    public String shortestPalindrome(String s) {
 2         
 3         List<Character> list = new ArrayList<>();
 4         list.add(‘#‘);
 5         for(char c: s.toCharArray()) {
 6             list.add(c);
 7             list.add(‘#‘);
 8         }
 9 
10         int len = list.size();
11         int mid = (len - 1) / 2;
12         int i = 1;
13         int max = 0;
14         while(i <= mid) {
15             int left = i - 1;
16             int right = i + 1;
17             while(left >= 0 && right <= len - 1) {
18                 if(list.get(left) != list.get(right))
19                     break;
20                 left--;
21                 right++;
22             }
23             if(left <= 0)
24                 max = i;
25             i++;
26         }
27         max = max * 2 + 1;
28         StringBuilder sb = new StringBuilder();
29         for (int j = len - 1; j >= max; j--) {
30             if(list.get(j) != ‘#‘)
31                 sb.append(list.get(j));
32         }
33         sb = sb.append(s);
34         return sb.toString();
35     }

 

以上是关于214. Shortest Palindrome的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0214 Shortest Palindrome

[leetcode]Shortest Palindrome

蚁群算法MATLAB解VRP问题

LeetCode234. Palindrome Linked List

问题解决:信息提示SpringBoot启动时提示The APR based Apache Tomcat Native library which allows optimal performanc(代

934. Shortest Bridge