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;
}