获取最长不连续重复子字符串:两种方法

例如:

获取字符串“aaabddcccb”中最长不连续重复子字符串:

答案:最长不连续重复子串是“abd”

方法一:效率高,用时1毫秒,第二种方法13毫秒。

 1     /**
 2      * 获取最长连续不重复字符
 3      * @param s
 4      * @return
 5      */
 6     public static String getLongestDisContinuousRepeat(String s){
 7         String res="",item="",before="";
 8         char[] ch = s.toCharArray();
 9         for (int i = 0; i < ch.length; i++) {
10             if (before.equals(ch[i]+"")) {
11                 item=ch[i]+"";
12             }else {
13                 item=item+ch[i];
14             }
15             before=ch[i]+"";
16             if (item.length()>res.length()) {
17                 res = item;
18             }
19         }
20         return res;
21     }

 

方法一 拼接字符串也可使用StringBuffer

方法二:效率低,用时13毫秒左右,

本人正则表达式新手,用的不好,以后有高效的再修改,勿怪勿怪

 1 /**
 2      * 获取最长不连续重复字符
 3      * @param s
 4      * @return
 5      */
 6     public static String getLongestDisContinuousRepeat2(String s){
 7         String res="";
 8         StringBuffer item= new StringBuffer();
 9         char[] ch = s.toCharArray();
10         for (int i = 0; i < ch.length; i++) {
11             item.append(ch[i]+"");
12             if (item.length()>res.length()) {
13                 res = item.toString();
14             }
15             if (item.toString().matches(".*?(\\w)\\1{1,}.*?")) {//正则表达式判断,是否有连续重复字符
16                 item=new StringBuffer(ch[i]+"");
17             }
18         }
19         if (res.matches(".*?(\\w)\\1{1,}.*?")) {//有连续重复的字符
20             return res.substring(0, res.length()-1);//最后一个重复,去除。
21         }else {
22             return res;
23         }
24     }

 

posted @ 2018-12-27 12:21  好Wu赖  阅读(1151)  评论(0)    收藏  举报