Java实现回文串的四种方式

  • Post author:
  • Post category:java


Java实现回文串的两种方式

1、什么是回文串?

“回文串”是一个正读和反读都一样的字符串,如“level”或者“noon”等就是回文串。

2、回文串的两种Java实现

(1)字符串倒置后逐一比较法

public static boolean isPalindrome(String str) {


StringBuffer sb = new StringBuffer(str);

sb.reverse();// 把字符串反转

int count = 0;

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


if (str.charAt(i) == sb.charAt(i)) {


count++; //统计相同字符的个数

}

}

if (count == str.length()) {


return true;

} else {


return false;

}

}

(2)字符串倒置后创建新字符串,两字符串直接比较法

public static boolean isPalindrome(String str) {


StringBuilder sb = new StringBuilder(str);

sb.reverse(); // 将字符串反转

String newStr = new String(sb);

if (str.equals(newStr)) {


return true;

} else {


return false;

}

}

(3)字符串首尾元素对比法

实现一:

public static boolean isPalindrome(String str){


if(str == null || “”.equals(str)){


return false;

}

int i;

int j = str.length() – 1;

String[] strings = str.split(“”);

for (i = 0; i <= j; i++,j–) {


if(!strings[i].equals(strings[j])){


return false;

}

}

return true;

}

实现二:

public static boolean isPalindrome(String str) {


StringBuffer sb = new StringBuffer(str);

sb.reverse();// 把字符串反转

int count = 0;

for (int i = 0; i < str.length() / 2; i++) {

if ((str.substring(i, i + 1)).equals(str.substring(str.length() – 1- i, str.length() – i))) {

count++;

}

}

if (count == str.length() / 2) {


return true;

} else {


return false;

}

}

(4)利用入栈、出栈字符串的一半字符和剩余一半元素进行对比(借助数据结构—栈)

public static boolean isPalindrome(String str) {


// 堆栈一

List<Character> stack1 = new ArrayList<Character>();

// 堆栈二

List<Character> stack2 = new ArrayList<Character>();

// 字符串长度的一半

int haflen = str.length() / 2;

for (int i = 0; i < haflen; i++) {


// 字符进栈

stack1.add(str.charAt(i));

// 倒序进栈

stack2.add(str.charAt(str.length() – i – 1));

}

// 标识符

boolean bFlag = true;

// 出栈并比较

for (int i = haflen – 1; i >= 0; i–) {


if (stack1.remove(i) != stack2.remove(i)) {


bFlag = false;

break;

}

}

// 返回比对结果

return bFlag;

}