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 }

 

posted @ 2020-04-28 02:15  dust--  阅读(205)  评论(0编辑  收藏  举报