回文序列

Posted 千彧

tags:

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

题目描述

如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, 
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。

输入描述:

输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50) 第二行为序列中的n个整数item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。

输出描述:

输出一个数,表示最少需要的转换次数
示例1

输入

4 1 1 1 3

输出

2

 1 import java.util.LinkedList;
 2 import java.util.Scanner;
 3 
 4 /**
 5  * 回文数 求 最少操作步数
 6  * 从两边对比 不行等和里边的数操作替换,相等就过 继续比较里边的数  直到 i 过半 
 7  * @author Dell
 8  *
 9  */
10 public class Main {
11     
12 public static void main(String[] args) {
13     Scanner sc = new Scanner(System.in);
14     int n = sc.nextInt();
15     LinkedList<Integer> list = new LinkedList<Integer>();
16     for (int i = 0; i < n; i++) {
17         list.add(sc.nextInt());
18     }
19     int step = 0;
20     int i =0; 
21     while(i<=(list.size()/2)) {
22         int j = list.size()-1-i;
23         if (list.get(i)<list.get(j)) {
24             list.set(i,list.get(i)+list.get(i+1));
25             list.remove(i+1);
26             step++;
27         }else if (list.get(i)>list.get(j)) {
28             list.set(j,list.get(j)+list.get(j-1));
29             list.remove(j-1);
30             step++;
31         }else {
32             i++;
33         }
34     }
35     System.out.println(step);
36 }
37 }

 

以上是关于回文序列的主要内容,如果未能解决你的问题,请参考以下文章

Java 求解最长回文子序列

hdu4632 回文子序列

回文序列判断

如何进行dna回文序列分析

poj 3280 Cheapest Palindrome (回文子序列,区间dp)

回文串与回文序列