`

interview---str---aaaddxxxxddddxxxx

阅读更多
/*
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);

    }


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics