123
返回列表 发新帖
楼主: 北极兔兔鲨
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 求助一道shortest balanced substring的题!

🔗
myfairlady 2022-7-8 01:59:30 | 只看该作者
全局:
sylvia2010 发表于 2021-1-6 13:55
得,脸都快被打肿了才写出来。

Sliding window 还是适合有一定 “单调性” 的问题,这个其实没那么合适 ...

谢谢分享!
请教一下:
1. 为什么要再建一个count2呢?
2. if all(count2[c.swapcase()] for c in count2 if count2[c]):是为什么呢?
谢谢!!!
回复

使用道具 举报

🔗
myfairlady 2022-7-8 07:45:57 | 只看该作者
全局:
我试着模仿了一个java版本,但是运行结果不对,哪位大神能帮我看看嘛?感觉这道题好难啊
  1. public String shortestBalancedString(String s){
  2.         Map<Character, Integer> count = new HashMap<>();
  3.         Map<Character, Integer> lastseen = new HashMap<>();
  4.         int i = 0;
  5.         int ans = Integer.MAX_VALUE;
  6.         String res = "";

  7.         for(int j = 0; j < s.length(); j++){
  8.             char ch = s.charAt(j);
  9.             char swapped = convert(ch);

  10.             count.put(ch,count.getOrDefault(ch,0)+1);
  11.             lastseen.put(ch, lastseen.getOrDefault(ch, -1));

  12. //            lastseen.put(swapped, lastseen.getOrDefault(swapped, -1));

  13.             if(!count.containsKey(swapped) || lastseen.get(swapped) < lastseen.get(ch)){
  14.                 lastseen.put(ch, j);
  15.                 continue;
  16.             }
  17.             while(i < lastseen.get(s.charAt(i)) || i <= j-ans+1){
  18.                 count.put(s.charAt(i), count.get(s.charAt(i))-1);
  19.                 i++;
  20.             }

  21.             Map<Character, Integer> count2 = new HashMap<>();
  22.             count2.putAll(count);
  23.             for(int k = i; k <= lastseen.get(swapped); k++){
  24.                 boolean flag = true;
  25.                 for(char x : count2.keySet()) {
  26.                     if (!count2.containsKey(convert(x))) {
  27.                         flag = false;
  28.                         break;
  29.                     }
  30.                 }
  31.                 if(flag) {
  32.                     res = s.substring(k, j + 1);
  33.                     ans = j - k + 1;
  34.                 }

  35.                 count2.put(s.charAt(k), count2.get(s.charAt(k))-1);
  36.             }
  37.             lastseen.put(ch,j);
  38.         }
  39.         return res;
  40.     }


  41.     private char convert(char c){
  42.         if(Character.isLowerCase(c)){
  43.             return Character.toUpperCase(c);
  44.         }
  45.         return Character.toLowerCase(c);
  46.     }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表