我原来提交的代码:
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;
}
}
但相应的内存占用略微增加



