leetcode[Longest Palindrome]//待整理多种解法

来源:互联网 发布:荷兰国旗问题算法java 编辑:程序博客网 时间:2024/06/01 18:57

解法一:

public class Solution {    public int longestPalindrome(String s) {        //由于本题只让求出给定字符串可能组成的最大回文串(由给定字符串的子串排列组合而成)的最大长度    //没有让求出具体的哪一个最大回文串,所以不用去一个个找    //根据回文串的定义,只要一个字符串是2n或2n+1的形式,n代表一个相同的部分,那么这个字符串就是回文串        HashSet<Character> set = new HashSet<>();//HashSet在查找特定元素上比较快,而且虽然Set不允许重复,但一定没有重复的可能    int count = 0;    for(int i = 0; i < s.length(); i++){    if(set.contains(s.charAt(i))){    count++;    set.remove(s.charAt(i));//移除相同的部分,这里用count就相当于在记录2n的n    }    else{    set.add(s.charAt(i));    }    }        //最后set集合中还剩下一些都不属于2n的n,都是消不了的,可以随便选一个来构成2n+1的1    //若最后set集合中不剩下元素,说明刚好是2n        if(set.isEmpty()){    return 2 * count;    }    else{    return 2 * count + 1;    }        }}


阅读全文
0 0
原创粉丝点击