`
mabusyao
  • 浏览: 252643 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

palindrome

阅读更多

package palindrome;

/*Problem Statement


A palindrome is a string that reads the same forward and backward.

A palindrome substring is a contiguous sequence of characters taken from a string that form a palindrome.

A palindrome substring of a string is maximal if we can't extend it to get a bigger palindrome substring.

For example, string "acdadc" has 2 maximal palindrome substrings - "a" (the first one) and "cdadc".

All other palindrome substrings (like "dad" or "c") can be extended to "cdadc", so they are not maximal.

You will be given a String[] str.

Concatenate the elements of str to form one long string, and return the number of maximal palindrome substrings contained in that string.

Definition

Class: MaximalPalindromeSubstrings
Method: countMaximalPalindromeSubstrings
Parameters: String[]
Returns: int
Method signature: int countMaximalPalindromeSubstrings(String[] str)

(be sure your method is public)

Constraints
- str will contain between 1 and 50 elements, inclusive.
- Each element of str will contain between 1 and 50 characters, inclusive.
- Each character of each element of str will be a lowercase letter ('a'-'z').
Examples
0) {"acdadc"} Returns: 2 The example from the problem statement.
1) {"ababab"} Returns: 2 The two maximal palindrome substrings here are "ababa" and "babab".
2) {"aaaa","bbb","axxx"} Returns: 3 Remember to use the whole input!
3) {"abacabbacaacdbdcacxcbbbbcabababacccbazhhaahh"} Returns: 14

This problem statement is the exclusive and proprietary property of TopCoder, Inc.
Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited.
(c)2003, TopCoder, Inc. All rights reserved. */

public class MaximalPalindromeSubstrings {


public static int countMaximalPalindromeSubstrings(String[] str) {

int length = 0;
for(int i = 0; i < str.length; i++) {
length = length + str[i].length();
}

char[] array = new char[length];

int p = 0;
for(int i = 0; i < str.length; i++) {
char[] tempArray = str[i].toCharArray();
for(int j = 0; j < tempArray.length; j++) {
array[p] = tempArray[j];
p++;
}
}

p = 0;
while(p<length) {
int index = 0;
while(p - index >=0 && p + index < length) {
if(array[p - index] == array[p + index]) index++;
else break;
}
index--;
save(p - index, p + index);

index = 0;
if((p + 1 < length) && (array[p] == array[p + 1])) {
while(p - index >=0 && p + 1 + index < length) {
if(array[p - index] == array[p + 1 + index]) index++;
else break;
}
index--;
save(p - index, p + 1 + index);
}
p++;
}

print(array);
return root -1;
}


// Stack for the result storage.
private static Pair[] result = new Pair[100];

private static int root = 0;

static class Pair {
int start = 0;
int end = 0;

Pair(int i, int j) {
start = i;
end = j;
}
}

/*
* Check if there is a larger ranger or smaller range.
* Erase the smaller range if needed.
*/
private static void save(int i, int j) {
if(root == 0) {
Pair pair = new Pair(i, j);
result[0] = pair;
root++;
}
else {
int cursor = root - 1;

if (result[cursor].start <= i && result[cursor].end >= j) return;

while(cursor >= 0) {
if(result[cursor].start >= i && result[cursor].end <= j) {
cursor--;
result[root - 1] = null;
root--;
}
else break;
}

Pair pair = new Pair(i, j);
result[root] = pair;
root++;

}
}

/*
* print the result out.
*/
private static void print(char[] array) {
for(int i = 0; i < root; i++) {
for(int j = result[i].start; j <= result[i].end; j++) {
System.out.print(array[j]);
}
System.out.print("\n");
}
}
}




public class Main {

/**
* @param args
*/
public static void main(String[] args) {

try {

String[] a = {"aaaa","bbb","axxx"};
String b = "abacabbacaacdbdcacxcbbbbcabababacccbazhhaahh";
MaximalPalindromeSubstrings.countMaximalPalindromeSubstrings(new String[]{b});
} catch(Exception e) {
e.printStackTrace();
}

}
}

分享到:
评论

相关推荐

    POJ1159-Palindrome

    【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...

    JAVA程序 Palindrome(回文?)

    JAVA程序 Palindrome.java 输入任何字母数字组合 检查是否是回文结构? 例:abccba 从左往右看 和 从右往左看一样 为回文结构 包括检查是否带标点符号 检查是否有空格 如a bccba 输入带空格 仍为回文结构

    Pku acm 第1159题 Palindrome 代码

    Pku acm 第1159题 Palindrome 代码,有详细的注释,动态规划

    Palindrome Sub-Array

    Palindrome Sub-Array,Problem Description  A palindrome sequence is a sequence which is as same as its reversed order. For example, 1 2 3 2 1 is a palindrome sequence, but 1 2 3 2 2 is not. Given a 2-...

    C++实现的Palindrome,回文

    在编程领域,回文是一种特殊的字符串,它从前向后读和从后向前读是一样的,例如"madam"、"racecar"等。本主题主要关注如何使用C++语言来实现回文检测算法。C++作为一门强大的面向对象编程语言,提供了丰富的标准库和...

    huiwenshu.rar_palindrome

    标题中的“huiwenshu.rar_palindrome”表明这是一个关于回文数的程序或代码库,可能用于教学或练习目的。回文数是指正向读和反向读都一样的数字,比如121、12321等。在银行管理场景中,回文数可能与账户编号、交易...

    LeetCode9 Palindrome Number

    《LeetCode9:判断回文数——Java实现详解》 在编程的世界里,LeetCode是一个广受欢迎的在线平台,它提供了各种算法问题供程序员们挑战和提升技能。今天我们要探讨的是LeetCode第9题——“回文数”。...

    PyPI 官网下载 | check-palindrome-kriti-0.0.1.tar.gz

    《PyPI官网下载:探索check-palindrome-kriti-0.0.1.tar.gz中的Python库知识》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供全球开发者下载和使用。本文将深入探讨标题为...

    Stack3 java.rar_Stack3 java_palindrome

    标题中的"Stack3 java.rar_Stack3 java_palindrome"表明这是一个关于使用Java编程语言实现堆栈(Stack)数据结构,并且应用在判断回文(Palindrome)字符串上的项目。回文是指正读反读都能读通的字符串,如“level”...

    LeetCode Palindrome Number解决方案

    LeetCode Palindrome Number解决方案 在本节中,我们将讨论如何确定一个整数是否是一个回文数。一个整数是一个回文数当它从左到右读取和从右到左读取相同。 问题描述: 给定一个整数,判断它是否是一个回文数。 ...

    北大POJ1159-Palindrome

    北大POJ1159-Palindrome

    Palindrome-number-in-c.rar_number

    在编程领域,回文数(Palindrome Number)是一个重要的概念,尤其在算法设计和问题解决中常见。本资源“Palindrome-number-in-c.rar_number”提供了一个关于如何在C语言中判断一个整数是否为回文数的解决方案。回文...

    C#,回文分割问题(Palindrome Partitioning Problem)算法与源代码

    C#,回文分割问题(Palindrome Partitioning Problem)算法与源代码 1 回文串 “回文串”是一个正读和反读都一样的字符串,初始化标志flag=true,比如“level”或者“noon”等等就是回文串。 2 回文分割问题 给定...

    PalindromeNumber.java

    PalindromeNumber.java

    palindrome22.in

    palindrome22.in

    回文数(Palindrome)是指一个正整数从前往后读和从后往前读是完全相同的数,例如 121、1331、1001 等 回文

    #### 回文数(Palindrome) 回文数是指一个正整数从前往后读和从后往前读是完全相同的数。这种数字特性使得它们在数学和计算机科学领域具有一定的研究价值。例如,121、1331、1001等都是回文数的例子。 #### 回文...

    SPIM 计算字符串是否为palindrome

    检查字符串是否为palindrome, 从前后分别检查,并计算出相同或不同的数量。

    palindrome_prime.c

    palindrome_prime.c

    palindrome(STACK,QUEUE).cpp

    palindrome(STACK,QUEUE).cpp

Global site tag (gtag.js) - Google Analytics