活跃农民
- 积分
- 307
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-12-2
- 最后登录
- 1970-1-1
|
我试着模仿了一个java版本,但是运行结果不对,哪位大神能帮我看看嘛?感觉这道题好难啊- public String shortestBalancedString(String s){
- Map<Character, Integer> count = new HashMap<>();
- Map<Character, Integer> lastseen = new HashMap<>();
- int i = 0;
- int ans = Integer.MAX_VALUE;
- String res = "";
- for(int j = 0; j < s.length(); j++){
- char ch = s.charAt(j);
- char swapped = convert(ch);
- count.put(ch,count.getOrDefault(ch,0)+1);
- lastseen.put(ch, lastseen.getOrDefault(ch, -1));
- // lastseen.put(swapped, lastseen.getOrDefault(swapped, -1));
- if(!count.containsKey(swapped) || lastseen.get(swapped) < lastseen.get(ch)){
- lastseen.put(ch, j);
- continue;
- }
- while(i < lastseen.get(s.charAt(i)) || i <= j-ans+1){
- count.put(s.charAt(i), count.get(s.charAt(i))-1);
- i++;
- }
- Map<Character, Integer> count2 = new HashMap<>();
- count2.putAll(count);
- for(int k = i; k <= lastseen.get(swapped); k++){
- boolean flag = true;
- for(char x : count2.keySet()) {
- if (!count2.containsKey(convert(x))) {
- flag = false;
- break;
- }
- }
- if(flag) {
- res = s.substring(k, j + 1);
- ans = j - k + 1;
- }
- count2.put(s.charAt(k), count2.get(s.charAt(k))-1);
- }
- lastseen.put(ch,j);
- }
- return res;
- }
- private char convert(char c){
- if(Character.isLowerCase(c)){
- return Character.toUpperCase(c);
- }
- return Character.toLowerCase(c);
- }
复制代码 |
|