java FileDelete
java FileReadWriteUTF8
以下片段介绍了如何从包含UTF-8编码数据的文件进行读写
java FILEREAD
从文件中读取的方法
java Palindromic Substrings--回文子串数量
给定某个字符串,求其中回文子串数量。例如“aaa”,结果就是“a”,“a”,“a”,“aa”,“aa”,“aaa”,6个
java Palindrome Partitioning - 分割成回文串
给定某个字符串,将其分割使得每个子串都是回文串。求所有的分割情况。<br/>需要用DFS来解的题目,既然题目要求找到所有可能拆分成回文数的情况,那么肯定是所有的情况都要遍历到,对于每一个子字符串都要分别判断一次是不是回文数,那么肯定有一个判断回文数的子函数,还需要一个DFS函数用来递归,再加上原本的这个函数,总共需要三个函数来求解。我们将已经检测好的回文子串放到字符串数组进行中,当小号遍历完了之后,将出加入结果水库中。那么在递归函数中我们必须要知道当前遍历到的位置,用变量开始来表示,所以在递归函数中,如果开始等于字符串小号的长度,说明已经遍历完成,将出加入结果资源中,并返回。否则就从开始处开始遍历,由于不知道该如何切割,所以我们要遍历所有的切割情况,即一个字符,两个字符,三个字符,等等。首先判断取出的子串是否是回文串,调用一个判定回文串的子函数即可,这个子函数传入了子串的起始和终止的范围,若子串是回文串,那么我们将其加入,并且调用递归函数,此时开始传入i + 1,之后还要恢复出的状态。
java Palindrome Pairs--回文对 - 硬难
要用到哈希表来建立每个单词和其位置的映射,然后需要一个设置来保存出现过的单词的长度,算法的思想是,遍历单词集,对于遍历到的单词,我们对其翻转一下,然后在哈希表查找翻转后的字符串是否存在,注意不能和原字符串的坐标位置相同,因为有可能一个单词翻转后和原单词相等,现在我们只是处理了蝙蝠和标签的情况,还存在ABCD和CBA,DCB和ABCD这些情况需要考虑,这就是我们为啥需要用一套,由于设置是自动排序的,我们可以找到当前单词长度在设置中的迭代器,然后从开头开始遍历集合,遍历比当前单词小的长度,比如abcdd翻转后为ddcba,我们发现设置中有长度为3的单词,然后我们DD是否为回文串,若是,再看CBA是否存在于哈希表,若存在,则说明abcdd和CBA是回文对,存入结果中,对于DCB和aabcd这类的情况也是同样处理,我们要在设置里找的字符串要在遍到的字符串的左边和右边分别尝试,看是否是回文对,这样遍历完单词集,就能得到所有的回文对。
java 二进制搜索
java 最短回文子串
给定某个字符串,然后要求可以在该字符串之前加一些字符来构成整体性的回文字符串。求最短的回文字符串。<br/>实际最差的情况就是把给定的字符串反转过来然后拼接在原字符串前面来生成,但不是最短的。但是可以发现结果字符串是回文字符串而且其对称中心一定在原字符串某个位置,所以源字符串头部应该找最长的回文字符串,该题就是寻找原字符串最长的头部回文字符串,实际就想找到原字符串中某个分界点使得其前面的字符串和后面相同长度的字符串是镜像关系的。<br/>一种十分巧妙的方法是将源字符串s反转得到reverse(s)然后拼接在s后面形成s +“#”+ reverse(s),然后将其作为模式串应用KMP算法计算其下一个数组,因为下一个数组中每一个数字代表不包括该字符在内的前面所有字符组成的字符串最大相同前后缀长度,这种拼接之后的结果用KMP算法,际相当于假设原字符串是ABC其中甲和乙应该是镜像关系的,也就是分界点在甲和乙之间,而拼接之后的字符串是ABC#〜C〜乙〜A,此时如果甲恰好等于~B,而B恰好等于~A。<br/>
java 判断数字是否为回文数字
java 回文全排列
给定某个字符串,判断其某个全排列字符串是否是回文字符串。