Day16 String & exception作业
作业:
1. 判断一个字符串是否是回文串
例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
2. 统计大串中小串出现的次数
举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次
附加题:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
注意:如果有多个最长回文串,返回其中一个即可
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
参考答案:
1.
2.
3.
1 public class Solution { 2 3 /* 4 * 该方法用来求得字符串s的最长回文子串 5 */ 6 public String longestPalindrome(String s) { 7 if (null == s) { 8 return null; 9 } 10 11 if (s.length() == 1) { 12 return s; 13 } 14 String longestPalindrome = ""; 15 16 for (int i = 0; i < s.length(); i++) { 17 18 // 找到以第i个位置的字符为对称轴的最大回文子串 19 String tmp1 = findsubPalinrome(s, i, i); 20 if (tmp1.length() > longestPalindrome.length()) { 21 longestPalindrome = tmp1; 22 } 23 24 // 找到以第 i 个字符和第 i + 1个字符中间位置为对称轴的最大回文子串 25 String tmp2 = findsubPalinrome(s, i, i + 1); 26 if (tmp2.length() > longestPalindrome.length()) { 27 longestPalindrome = tmp2; 28 } 29 } 30 return longestPalindrome; 31 } 32 33 /* 34 * s为待判断的字符串 在[0, l]找回文串的左半部分 在[h, s.length - 1]找回文串的右半部分 找到的最长的回文子串 35 */ 36 private String findsubPalinrome(String s, int l, int h) { 37 char[] target = s.toCharArray(); 38 while (l >= 0 && h < s.length() && target[l] == target[h]) { 39 l--; 40 h++; 41 } 42 l++; 43 h--; 44 // 此时l指向了回文串最左端的字符位置,h指向了回文串最右端的位置,所以该回文串包含的字符个数为 h - l + 1 45 return new String(target, l, h - l + 1); 46 } 47 }