java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
- 直接使用中心扩展法即可。
- 对于其它方法,LeetCode第5题都有涉及
🏆LeetCode5:最长回文子串https://blog.csdn.net/grd_java/article/details/124666706 |
---|
- 对于不同的回文串,它的中心可能是1个字符,或者2个字符
- 例如abccba这样的字符串是回文串,以两个字符cc为中心
- abcccba这样的是以一个字符c为中心的回文串
- 所以我们可以从头到尾遍历字符串。然后每一次都考虑,两个字符为中心,和一个字符为中心,这两种情况来构建回文串。
- 确定中心后,只需要使用贪心的思想,不断扩展的比较两边。当前两边只要相等,那么整个字符串就是回文串。
- 例如abc
c
cba。我们先拿到了c - 然后向两边扩展比较,ab
c
cc
ba。我们发现两边相等。那么ccc就是一个回文串 - 再次向两边扩展a
b
cccb
a,两边再次相等,那么bcccb就是一个回文串 - 再次向两边扩展
a
bcccba
两边再次相等,那么abcccba就是一个回文串
class Solution {public int countSubstrings(String s) {int n = s.length(), ans = 0;char c[] = s.toCharArray();for(int i = 0; i < n;i++){ans += expandAroundCenter(c,i,i);ans += expandAroundCenter(c,i,i+1);}return ans;}private int expandAroundCenter(char[] c,int i, int j){int count = 0;while(i >= 0 && j < c.length && c[i]==c[j]){i--;j++;count++;}return count;}
}