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

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

关于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;
    }
}


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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5638232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存