LeetCode:
密钥格式化
我的解法:
public static String licenseKeyFormatting(String S, int K) {
String s = S.replaceAll("-", "").toUpperCase();
char[] sChars = s.toCharArray();
String retStr = "";
int j=0;
for (int i = sChars.length-1; i >=0; i--) {
if(j<K) {
retStr=sChars[i]+retStr;
j++;
}else {
retStr="-"+retStr;
j=0;
i+=1;
}
}
return retStr;
}
但是这样的效率不高,在执行上给出的时间是:

在浏览了评论区发现有更高效的解法
public String licenseKeyFormatting(String S, int K) {
S = S.toUpperCase().replace("-", "");
StringBuilder sb = new StringBuilder(S);
int len = sb.length();
for (int i = K; i < len; i += K)
sb.insert(len - i, '-');
return sb.toString();
}
相比之下,这种比我那个好很多

然后还有一种,更快:
public String licenseKeyFormatting(String S, int K) {
char[] chars = S.toUpperCase().toCharArray();
StringBuilder sb = new StringBuilder();
int count = 0;
for (int i = chars.length - 1; i >= 0; i--) {
if (chars[i]=='-')
continue;
if (count%(K)==0&&count!=0){
sb.append('-');
}
count++;
sb.append(chars[i]);
}
return sb.reverse().toString();
}
执行用时:

所以在操作巨多的字符串的时候用StringBuffer和StringBuilder会大大提高执行效率;
网友评论