我原来提交的代码:
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; } }
但相应的内存占用略微增加
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)