栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于leetcode每日一题《连续字符》Consecutive Characters的一点小心得

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于leetcode每日一题《连续字符》Consecutive Characters的一点小心得


我原来提交的代码:

class Solution {
  public int maxPower(String s) {
        //用来记录重复字符的最大长度
    int bestlength=1;
    //用字符和a比较然后用键值表示对应字符,用对应的value表示它的个数
    int[] arr=new int[26];
    //防止越界
    arr[s.charAt(0)-'a']++;
        for (int i = 1; i < s.length(); i++) {
            //判断上一个字符是否跟这个一样
            if(s.charAt(i-1)-'a'==s.charAt(i)-'a'){
                //每有一个字符就给对应的数组元素++
                arr[s.charAt(i)-'a']++;
            }
         else{
                arr[s.charAt(i)-'a']=1;
            }

            if(arr[s.charAt(i)-'a']>bestlength){
                bestlength=arr[s.charAt(i)-'a'];
            }

        }
        

    return bestlength;
    }
}

这里每一次循环都是使用了s.charAt(i),效率极低,因为String的操作一般都需要创建对象,运行时需要2ms,效率非常的低!!!!!

建议使用StringBuffer或者是StringBuilder来提高效率,或者先把字符串变成字符数组。
这里就先把它变成了字符数组,大幅提高了运行速率

class Solution {
 public int maxPower(String s) {
        //用来记录重复字符的最大长度
    int bestlength=1;
    //用字符和a比较然后用键值表示对应字符,用对应的value表示它的个数
    int[] arr=new int[26];
    char[] chars=s.toCharArray();

    //防止越界
    arr[chars[0]-'a']++;
        for (int i = 1; i < s.length(); i++) {
            //判断上一个字符是否跟这个一样
            if(chars[i-1]-'a'==s.charAt(i)-'a'){
                //每有一个字符就给对应的数组元素++
                arr[chars[i]-'a']++;
            }
         else{
                arr[chars[i]-'a']=1;
            }

            if(arr[chars[i]-'a']>bestlength){
                bestlength=arr[chars[i]-'a'];
            }

        }
    return bestlength;
    }
}


但相应的内存占用略微增加

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号