「java最长回文串」java最长回文子串

博主:adminadmin 2023-01-02 08:57:07 584

本篇文章给大家谈谈java最长回文串,以及java最长回文子串对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA练习题,编写一程序输出一个字符串中的所有回文串,求大神解答~

基本思路:1、递归。字符串掐头去尾然后再进行下一级判断。这样会有重复,并且计算复杂度是指数级增长。 2、简单循环。从2-[字符串长度]的字符串逐个获得判断。

这里就用第二种方法了~~

#include iostream

#include cstdio

#include cstring

void outputString(char*, int);

char* partString(char*, int, int);

char* revString(char*, int);

bool isReversible(char*, int);

bool strEqual(char*, char*, int);

int main() {

using namespace std;

char* str;

cout "Confirm the length of the string : ";

int len = 0;

cin len;

if(len = 0) return 0;

cout endl "The string please =O= : ";

str = new char[len + 1];

cin.get();

cin.getline(str, len);

cout endl "The String : " str;

cout endl "Now outputting ... " endl;

outputString(str, strlen(str));

cout endl "Done, press any key to quit..." endl;

system("pause");

}

void outputString(char* str, int len) {

for(int i = 2; i len - 1; i++) {

for(int j = 0; j len - i; j++) {

char* str2 = partString(str, j, i);

if(isReversible(str2, i))

std::cout str2 std::endl;

delete[] str2;

}

}

}

char* partString(char* str, int index, int len) {

char* str2 = new char[len + 1];

for(int i = index; i index + len; i++)

str2[i - index] = str[i];

str2[len] = '\0';

return str2;

}

bool isReversible(char* str, int len) { //确认一个字符串是否是回文串。

char *str1, *str2;

if(len % 2 == 0) {

str1 = partString(str, 0, len/2);

str2 = revString(partString(str, len/2, len/2), len/2);

} else {

str1 = partString(str, 0, len/2);

str2 = revString(partString(str, len/2 + 1, len/2), len/2);

}

bool b = strEqual(str1, str2, len/2);

delete[] str1, str2;

return b;

}

char* revString(char* str, int len) { //返回一个前后颠倒的字符串。

char* str2 = new char[len + 1];

for(int i = 0; i len; i++) {

str2[len - i - 1] = str[i];

}

str2[len] = '\0';

return str2;

}

bool strEqual(char* str1, char* str2, int len) { //确认两个字符串是否相等。

for(int i = 0; i len; i++)

if(str1[i] != str2[i]) return false;

return true;

}

表示要改写成java难度应该不大 咱写的那么认真还测试编译通过了就采纳了吧~QwQ

java代码如何编写代码找出一下字符串最长的回文数。求解

弄个string数组对象 加载进来所有字符串 然后比较 字符串的。length() , length返回int型 数据 比较大小 把最大的找出来 然后输出出来 就搞定了

JAVA回文数求解释,一下是代码和问题。

str = input.nextLine().trim(); //从键盘或者其他什么地方输入的,取得字符串,并且去掉前后空格 c = str.toCharArray(); //把字符串转化成字符数组 for(int i = c.length -1; i = 0 ; i--){ //从尾到头遍历数组 tmp +=c[i]; //将字符组成字符串 }

采纳哦

【java字符串处理】现在给你一个字符串S,请你计算S中有多少连续子串是回文串。

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class test

{

public static void main(String[] args) throws IOException

{

System.out.print("输入圆盘的个数:");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String str=br.readLine();

int m=Integer.parseInt(str);

System.out.println("移动步骤:");

hanoi(m,'A','B','C');

}

Java 判断回文字符串有多少和其中的最大字符

二、代码部分

1、全局变量

1 static String hws = "";

2 static int num = 0;

3 static String[] hw;

2、创建数组用于保存回文

复制代码

1 /**

2 * 创建数组保存所有的回文

3 *

4 * @return 返回一个String类型的数组

5 */

6 public static String[] createHw() {

7 return new String[num];

8 }

复制代码

3、将hws字符串更改为空字符

1 /**

2 * 将hws字符串更改为空字符

3 */

4 public static void hwsClose() {

5 hws = "";

6 }

4、判断该字符串中存在的回文的数量

复制代码

1 /**

2 * 判断该字符串中存在的回文的数量

3 *

4 * @param c

5 * 数组c ,c是用户输入的字符串转换为单个字符组成的数组

6 * @return

7 */

8

9 public static int judgeNumber(char[] c) {

10 for (int i = 0; i c.length - 1; i++) {

11 if (c[i] == c[i + 1]) {

12 num++;

13 }

14 }

15 return num;

16 }

复制代码

5、第一次判断字符串中前后的数是否存在相同

复制代码

1 /**

2 * 第一次判断字符串中前后的数是否存在相同

3 *

4 * @param c

5 * 数组c ,c是用户输入的字符串转换为单个字符组成的数组

6 */

7

8 public static void judge(char[] c) {

9 judgeNumber(c);

10 if (num != 0) {

11 hw = createHw();

12 for (int i = 0; i c.length - 1; i++) {

13 if (c[i] == c[i + 1]) {

14 hws = hws + c[i];

15 judge2(c, i, i + 1);

16 hw[--num] = hws;

17 hwsClose();

18 }

19 }

20 } else {

21 System.out.println("该字符串没有回文");

22 }

23 }

复制代码

6、进行二次判断以当前相同的字符为起点,分别以前下标向前和该后下标向后进行比较()

复制代码

1 /**

2 * 进行二次判断以当前相同的字符为起点,分别以前下标向前和该后下标向后进行比较()

3 *

4 * @param c

5 * 数组c ,c是用户输入的字符串转换为单个字符组成的数组

6 * @param i

7 * 数组前一个下标,该下标和后一个进行比较并且相同

8 * @param k

9 * 数组后一个下标,该下标和前一个进行比较并且相同

10 */

11

12 public static void judge2(char[] c, int i, int k) {

13 if (i - 1 = 0 k + 1 c.length) {

14 if (c[i - 1] == c[k + 1]) {

15 hws = hws + c[i - 1];

16 judge2(c, i - 1, k + 1);

17 }

18 }

19 }

复制代码

7、输出所得的回文

复制代码

1 /**

2 * 获取所得的回文

3 *

4 * @param c

5 * 数组c ,c是用户输入的字符串转换为单个字符组成的数组

6 */

7

8 public static void outPalindrome(char[] c) {

9 judge(c);

10 if (hw!=null) {

11 for (int i = 0; i hw.length; i++) {

12 System.out.println(reverse(hw[i])+hw[i]);

13 }

14 } else {

15 System.out.println("没有回文2");

16 }

17 }

复制代码

8、将最长的回文输出

复制代码

1 /**

2 * 将最长的回文输出

3 *

4 */

5

6 public static void longestPalindromes() {

7 String longest = null;

8 if (hw!=null) {

9 if (hw.length == 1) {

10 System.out.println(reverse(hw[0])+hw[0]);

11 } else {

12 for (int i = 0; i hw.length - 1; i++) {

13 for (int j = 0; j hw.length - 1 - i; j++) {

14 if (hw[j].length() hw[j + 1].length()) {

15 longest = hw[j + 1];

16 hw[j + 1] = hw[j];

17 hw[j] = longest;

18 }

19 }

20 }

21 for (int i = 0; i hw.length - 1; i++) {

22 if (hw[hw.length - 1].length() == hw[hw.length - i - 1].length()) {

23 System.out.println(reverse(hw[hw.length - i - 1])+hw[hw.length - i - 1]);

24 }

25 }

26 }

27 } else {

28 System.out.println("没有回文3");

29 }

30 }

java 编写一个方法,找出一个字符串中最长的回文子串

Java code

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

import java.util.ArrayList;

import java.util.List;

public class Palindrome {

/* 找出一个字符串中最长的回文子串

* 从字符串中第i个字符开始的所有非空回文子串的个数, 记作为Ci. 此方法的复杂度为

* O(C1 + C2 + ... + Cn)

* 当字符串中任意两个非空回文子串的起始位置不同时, C1 = C2 = ... = Cn = 1, 复杂度为O(N);

* 当字符串所有字符均为同一字符时, Ci = n - i, 此时复杂度为O(N*N);

* 在多数情况下, 此方法的复杂度远低于O(N*N).

*/

public ListString getLongestPalindrome(String theString) {

int strLen = theString.length();

ListString results = new ArrayListString(strLen);

if (strLen == 0) {

return results;

}

// 从第i个位置开始的所有回文子串的结束位置.

int[] endIndice = new int[strLen + 1];

// endIndice中有效数据的长度.

int numberOfPalindromes = 1;

// 最长回文子串的长度. 对于非空串至少可以找到长度为1的回文子串.

int maxLen = 1;

results.add(theString.substring(strLen - 1));

// 计算从第i个位置开始的所有回文子串. 这样的子串分为三种:

// 1. 在从第i+1个位置开始的回文子串的基础上, 在两端加上相同的字符;

// 2. 长度为1的回文子串;

// 3. 空串.

for (int i = strLen - 2; i = 0; i--) {

int j = 0, k = 0;

while (j numberOfPalindromes) {

if (theString.charAt(i) == theString.charAt(endIndice[j])) {

endIndice[k] = endIndice[j] + 1;

int newLength = endIndice[k] - i;

if (newLength = maxLen) {

if (newLength maxLen) {

maxLen = newLength;

results.clear();

}

results.add(theString.substring(i, endIndice[k]));

}

if (endIndice[k] strLen) {

k++;

}

}

j++;

}

// 加入长度为1的子串

endIndice[k++] = i + 1;

if (maxLen == 1) {

results.add(theString.substring(i, i + 1));

}

// 加入空串

endIndice[k++] = i;

numberOfPalindromes = k;

}

return results;

}

public static void main(String[] args) {

Palindrome p = new Palindrome();

printList(p.getLongestPalindrome("gabcecbaefd"));

printList(p.getLongestPalindrome("bbcbaefccfg"));

printList(p.getLongestPalindrome("aaaaaaaaaaa"));

printList(p.getLongestPalindrome("abcdefghijk"));

printList(p.getLongestPalindrome("abcdeeddejk"));

printList(p.getLongestPalindrome(""));

}

public static void printList(List? extends Object list) {

System.out.println("**************************");

System.out.println(list.size() + " result(s):");

for (Object o : list) {

System.out.println(o);

}

}

}

java最长回文串的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java最长回文子串、java最长回文串的信息别忘了在本站进行查找喔。