image.pngimage.png

    暴力解法
    枚举每一条子串,判断长度是否大于当前的最大长度和该子串是否是回文子串。

    1. class Solution {
    2. public String longestPalindrome(String s) {
    3. int len = s.length();
    4. if(len < 2){
    5. return s;
    6. }
    7. int maxLen = 1;
    8. int left = 0;
    9. char[] arr = s.toCharArray();
    10. for(int i = 0;i < len - 1;i++){
    11. for(int j = i + 1;j < len;j++){
    12. if(j - i + 1 > maxLen && check(arr,i,j)){ // 进行剪枝的操作,减少多余的比较次数,如果长度比当前最大长度还小,就不需要判断是否是回文子串了。
    13. maxLen = j - i + 1;
    14. left = i;
    15. }
    16. }
    17. }
    18. return s.substring(left,left + maxLen);
    19. }
    20. public boolean check(char[] arr,int left,int right){
    21. boolean flag = true;
    22. while(left < right){
    23. if(arr[left] != arr[right]){
    24. flag = false;
    25. break;
    26. }
    27. left++;
    28. right--;
    29. }
    30. return flag;
    31. }
    32. }