获取最长不连续重复子字符串:两种方法
例如:
获取字符串“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 }
源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!

浙公网安备 33010602011771号