找到一个字符串的最长回文子串 我的思路: 回文串的特点:掐头去尾之后还是一个回文串 因此 我们可以使用两个索引,一个从头开始,一个从后边开始。尾部循环一轮,头索引向前推进一格,尾部循环的终止条件是尾部触碰到头部 每当发现这两个索引对应的字符相同时,也就是头尾相同,我们就可以开始进行一轮回文串的判定。 判定的过程是:头尾两个索引不动,再产生两个索引,分别指向头尾索引,这两个子索引对应的字符如果相同,就慢慢靠近,反之退出这一轮回文串的判定。如果发现是回文串,那么终止的条件会是原先左边的子索引大于等于原先右边的子索引。 找到回文串之后,就让它和之前的最长的回文串对比,如果更长则取代之。 之后发现了一个问题是,单个字母的字符串它会返回空,解决方法就是,定义返回串的时候,让返回串等于第一个字符(一个字符也是回文串) public String longestPalindrome(String s) { char[] charArray = s.toCharArray(); String resStr = charArray[0]+""; int index1 = 0; int index2 = 0; boolean flag = false; for (int i = 0; i < s.length(); i++) { for(int j = s.length()-1;j>i;j--){ if(charArray[i]==charArray[j]){ index1 = i; index2 = j; while(charArray[index1]==charArray[index2]&&index1<=index2){ index1++; index2--; } if(index1>=index2){ flag = true; //找到一个回文子串 String temp = s.substring(i, j + 1); if(temp.length()>=resStr.length()){ resStr = temp; } break;//在当前i下的找不到更长的了 } } } } return resStr; }
最长回文子串
最新推荐文章于 2025-05-09 17:11:59 发布