http://www.1point3acres.com/bbs/thread-136177-1-1.html
顺序输出出现连续次数最多的每个字符。
是韩国人[size=14.6666666666667px]面的。
刚开始用LinkedHashMap,写完之后他说能不能不用HashMap,只访问一遍。
然后坑坑巴巴的写出来了,被指出了不少bug。
感觉就是一个stack存已经找到的次数最长的,另外一个参数保存次数,如果找到更长的就empty这个stack就行了
public List<Character> getMostNumChars(String s) {
List<Character> list = new ArrayList<>();
if(s == null || s.isEmpty()) return list;
int n = s.length();
int max = 1;
int cnt = 1;
char prev = s.charAt(0);
for(int i=1; i<=n; i++) { . visit 1point3acres.com for more.
if(i < n && s.charAt(i) == prev) {
cnt++;
} else {
if(cnt > max) {
max = cnt;. From 1point 3acres bbs
list.clear();.
list.add(s.charAt(i-1));
} else if(cnt == max) {
list.add(s.charAt(i-1));
}
cnt = 1;
}
if(i < n) prev = s.charAt(i);
}
return list;
}
input1: thiisiisgoodd
output1: i i o d
input2: thiiisiisgoodd
output2: i
input3: this
output3: t h i s 顺序输出出现连续次数最多的每个字符。
是韩国人[size=14.6666666666667px]面的。
刚开始用LinkedHashMap,写完之后他说能不能不用HashMap,只访问一遍。
然后坑坑巴巴的写出来了,被指出了不少bug。
感觉就是一个stack存已经找到的次数最长的,另外一个参数保存次数,如果找到更长的就empty这个stack就行了
public List<Character> getMostNumChars(String s) {
List<Character> list = new ArrayList<>();
if(s == null || s.isEmpty()) return list;
int n = s.length();
int max = 1;
int cnt = 1;
char prev = s.charAt(0);
for(int i=1; i<=n; i++) { . visit 1point3acres.com for more.
if(i < n && s.charAt(i) == prev) {
cnt++;
} else {
if(cnt > max) {
max = cnt;. From 1point 3acres bbs
list.clear();.
list.add(s.charAt(i-1));
} else if(cnt == max) {
list.add(s.charAt(i-1));
}
cnt = 1;
}
if(i < n) prev = s.charAt(i);
}
return list;
}