对字符串来说,将其逆序后仍能跟自己相等即为回文。例如 “asdsa”.
代码如下:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Stack;
public class Test {
//判断该字符串是否为回文序列
public static boolean judgePalindromicSequence(String s){
for(int i=0 ; i < s.length()/2 ; i++)
if(s.charAt(i) != s.charAt(s.length()-i-1))
return false;
return true;
}
public static void modifyStack(Stack<String> stack,String str){
String topStr = stack.peek();
//由于栈中存放的字符串为目前最长回文序列(可能有多个长度相等的序列),如果当前序列的长度小于即将存入的字符串str的长度,则将栈清空并将str压入栈。如果长度相等,则不清空栈,仍将str也压入栈。
if(topStr.length() < str.length()){
stack.clear();
stack.push(str);
}
if(topStr.length() == str.length())
stack.push(str);
}
//打印最长回文序列
public static void printLongestPalindromicSequence(Stack<String> stack){
Set<String> set = new HashSet<>();
if(stack.empty())
System.out.println("该字符串没有回文序列");
else{
System.out.println("该字符串中最长回文序列如下:");
//将可能存在的重复字符串去除
while (stack.empty() == false)
set.add(stack.pop());
Iterator it = set.iterator();
while (it.hasNext())
System.out.println(it.next());
}
}
public static void main(String[] args){
String s = "asddfgsdffg";
Set<String> set = new HashSet<>();
Stack<String> stack = new Stack<>();
for(int i=0 ; i < s.length()-1 ; i++){
for(int j = i+1 ; j < s.length() ; j++){
if(s.charAt(j) == s.charAt(i)){
String str = s.substring(i,j+1);
if(judgePalindromicSequence(str) == true){
if(stack.empty() == true)
stack.push(str);
else
modifyStack(stack,str);
}
}
}
}
printLongestPalindromicSequence(stack);
}
}