/*
1. 一个字符串参数(value)由字母(a-z,A-Z)组成,且最大字符位数为40,
要求写一个函数(maxLength)返回该参数中连续相同字母的最大个数及该字母,
如果最大位数有多个,则返回第一个。例:字符串“aaaddxxxxddddxxxx”,返回值为:“x,4”。
要求:请考虑代码执行的效率并注意编码的风格。
注意:此题特征是连续的相同字母,这里注重的是效率,那么我们可以极大的损失空间来换取效率的提高
思路,一组一组的截取出来
*/
//package com.ricky.www;
public class Test{
public static void main(String[] args){
String content = "aaaddxxxxddddxxxx";
int max = 0;
String result = null;
String after = null;
int count = 0;
while(content.length() != 0){
after = content.replaceAll("^(\\w)\\1*",""); //把拥有连续结构的匹配为空,区别于(^(\\w)(?=\\1*))它将以字母开头且后面有连续结构字符串的第一个字母替换为空,(^(\\w)(?=\\1))它也是将第一个字符替换为空,因为在一个字符串中开头的字母是独一无二的,^是代表原始字符串的开头,并不会因为replaceAll而相应的调整开头的含义
count = content.length() - after.length(); //替换为空的那段长度
if(count > max){
max = count;
result = content.substring(0,1); //当前字符串的第一个字符
}
content = after;
}
System.out.println(result + " , " + max);
}
}
法二:
public static void main(String[] args) {
String s = "aaaaaddxxxxdddvvvvvvvvvvvvvvvvvvvvddxxxx";
Pattern p = Pattern.compile("(.)\\1+");
Matcher m = p.matcher(s);
int max = 0;
char c = ' ';
while (m.find()) {
if (max < m.group(0).length()) {
max = m.group(0).length();
c = m.group(0).charAt(0);
}
}
System.out.println("字母:" + c + " " + "次数:" + max);
}
[/code]
5349




被折叠的 条评论
为什么被折叠?



