推荐:数据科学课程和书籍清单以及培训讲座


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 5869|回复: 16
收起左侧

facebook电面

[复制链接] |试试Instant~ |关注本帖
kungfucop 发表于 2016-3-18 03:19:04 | 显示全部楼层 |阅读模式

2016(1-3月) 码农类 硕士 全职@Facebook - 内推 - 技术电面 |Other在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
一个笑呵呵的三哥,出了道题:自然string comparator。不知道的搜下。就是string 比较的时候考虑里面数字的大小,比如 abc9 < abc123 abc > ab9  因为char比digit重要。写的很顺利,最后run了test case 人家也说没问题。 然后就结束了。结果下了我自己ide跑发现有case 没cover,不知道他怎么想的,求过!求bless。

要的就是这样:
static class NaturalComparator implements Comparator<String> {
    /** 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
     * return negative num if l < r
     0  if l == r
     positive if l > r
     */
    public int compare(String l, String r) {}





评分

2

查看全部评分

liurudahai 发表于 2016-9-28 02:55:01 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
这题难道不是两个指针一起挪,边挪边比,如果都是字符串,直接比大小,相等继续,如果一个是字符串一个是数字,直接字符串胜,如果两个都是数字,同时遍历到数字的末尾,把整个数字取下来,对数字比大小,赢得胜,如果相等再继续重复上面的过程,如果到一个字符串已经完了还是相等,那么如果另一个字符串也同时遍历完的话就相等,不然另一个字符串胜
回复 支持 2 反对 0

使用道具 举报

freemail165 发表于 2016-3-28 03:46:09 | 显示全部楼层
关注一亩三分地微博:
Warald
试着写了一下,有些pseudo code..

public int compare(String a,String b) {.鏈枃鍘熷垱鑷1point3acres璁哄潧
    int indexa=0;
    int indexb=0;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
    while(indexa<a.length()&&indexb<b.length()) {
         char cura=a.charAt(indexa);
         char curb=b.charAt(indexb);
         if(isLetter(cura)&&isLetter(curb)) {
              if(cura<curb) return -1;
              if(cura>curb) return 1;
              indexa++; indexb++;
        } else if(isDigit(cura)&&isDigit(curb)) {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
              // find the number is a and in b, do comparasion.
. Waral 鍗氬鏈夋洿澶氭枃绔,              // if same indexa++;indexb++; compare next

       } else if(isDigit(cura)) {. From 1point 3acres bbs
                 return -1;
       } else {
                return 1;
       }
   }

    if(indexa==a.length()) return -1;
    return 1;
}


补充内容 (2016-3-28 03:47):
     // if same set indexa set indexb; then start to compare next
回复 支持 0 反对 1

使用道具 举报

lzm0909 发表于 2016-3-23 09:44:30 | 显示全部楼层
请问这种情况是哪个大?  abc9,  abc001
回复 支持 反对

使用道具 举报

 楼主| kungfucop 发表于 2016-3-23 12:19:57 | 显示全部楼层
lzm0909 发表于 2016-3-23 09:44. more info on 1point3acres.com
请问这种情况是哪个大?  abc9,  abc001
.1point3acres缃
abc9大,001要作为一个部分处理。
回复 支持 反对

使用道具 举报

dimi 发表于 2016-3-28 04:06:34 | 显示全部楼层

Character.isAlphabetic() 这个很有用-google 1point3acres

apache commons里的
NumberUtils.isDigits(str:String):boolean
NumberUtils.isNumber(str:String):boolean

也有用
回复 支持 反对

使用道具 举报

freemail165 发表于 2016-3-28 04:18:58 | 显示全部楼层
dimi 发表于 2016-3-28 04:06
Character.isAlphabetic() 这个很有用

apache commons里的

这个知道更好,不知道的话写一下就一行的事
回复 支持 反对

使用道具 举报

bobzhang2004 发表于 2016-4-4 05:46:25 | 显示全部楼层
写了下代码
  1. class NaturalComparator implements Comparator<String> {
  2.         /**
  3.          * return negative num if l < r 0 if l == r positive if l > r
  4.          */
  5.         public static void main(String[] args) {
  6.                 NaturalComparator nc = new NaturalComparator();
  7.                 System.out.println(nc.compare("abc8b", "abc7a"));.1point3acres缃
  8.         }
  9.         public  int compare(String l, String r) {
  10.                 int i = 0;
  11.                 int j = 0;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  12.                 while (i < l.length() && j < r.length()) {
  13.                         if (l.charAt(i) == r.charAt(j) && !Character.isDigit(l.charAt(i))) {
  14.                                 i++;.鏈枃鍘熷垱鑷1point3acres璁哄潧
  15.                                 j++;
  16.                         } else {
  17.                                 if (Character.isDigit(l.charAt(i)) && Character.isDigit(r.charAt(j))) {. visit 1point3acres.com for more.
  18.                                         int num1 = 0;
  19.                                         int num2 = 0;
  20.                                         while (i < l.length() && Character.isDigit(l.charAt(i))) {
  21.                                                 num1 = num1 * 10 + (l.charAt(i) - '0');
  22.                                                 i++;
  23.                                         }
  24.                                         while (j < r.length() && Character.isDigit(r.charAt(j))) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  25.                                                 num2 = num2 * 10 + (r.charAt(j) - '0');. from: 1point3acres.com/bbs
  26.                                                 j++;
  27.                                         }
  28.                                         if (num1 < num2) {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  29.                                                 return -1;
  30.                                         } else if (num1 > num2){. 1point3acres.com/bbs
  31.                                                 return 1;
  32.                                         }
  33.                                 } else {. Waral 鍗氬鏈夋洿澶氭枃绔,
  34.                                         if (Character.isDigit(l.charAt(i))) {
  35.                                                 return -1;
  36.                                         } else if (Character.isDigit(r.charAt(j))) {
  37.                                                 return 1;
  38.                                         } else {
  39.                                                 if (l.charAt(i) < r.charAt(j)) {
  40.                                                         return -1;
  41.                                                 } else {
  42.                                                         return 1;
  43.                                                 }
  44.                                         }
  45.                                         . from: 1point3acres.com/bbs
  46.                                 }
  47.                         }
  48.                 }
  49.                 if (i == l.length() && j == r.length()) {
  50.                         return 0;
  51.                 }
  52.                 if (i == l.length()) {. From 1point 3acres bbs
  53.                         return -1;
  54.                 } else {
  55.                         return 1;
  56.                 }
  57.         }.1point3acres缃
  58. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-4 15:12:08 | 显示全部楼层
  1. class NaturalComparator implements Comparator<String> {
  2.   /**
  3.    * return negative num if l < r; 0 if l == r; positive if l > r
  4.    */
  5.   public int compare(String l, String r) {
  6.     if (l.isEmpty() && !r.isEmpty())
  7.       return -1;
  8.     if (!l.isEmpty() && r.isEmpty())
  9.       return 1;
  10.     if (l.isEmpty() && r.isEmpty()). from: 1point3acres.com/bbs
  11.       return 0;
  12. . 1point 3acres 璁哄潧
  13.     int ll = 0;
  14.     while (ll < l.length() && Character.isDigit(l.charAt(ll))) {
  15.       ll++;. from: 1point3acres.com/bbs
  16.     }
  17.     int rr = 0;
  18.     while (rr < r.length() && Character.isDigit(r.charAt(rr))) {
  19.       rr++;
  20.     }

  21.     if (ll == 0 && rr > 0)
  22.       return 1;
  23.     else if (ll > 0 && rr == 0)
  24.       return -1;
  25.     else if (ll > 0 && rr > 0) {
  26.       int lll = Integer.parseInt(l.substring(0, ll));. 1point 3acres 璁哄潧
  27.       int rrr = Integer.parseInt(r.substring(0, rr));
  28.       if (lll != rrr) {
  29.         return lll - rrr;
  30.       } else {
  31.         return compare(l.substring(ll), r.substring(rr));
  32.       }. more info on 1point3acres.com
  33.     } else {
  34.       if (l.charAt(0) != r.charAt(0)) {
  35.         return l.charAt(0) - r.charAt(0);
  36.       } else {
  37.         return compare(l.substring(1), r.substring(1));
  38.       }
  39.     }
  40.   }
  41. }
  42. . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  43. . 1point3acres.com/bbs
  44. public class Solution {.鏈枃鍘熷垱鑷1point3acres璁哄潧
  45.   public static void main(String[] args) {
  46.     System.out.println(new NaturalComparator().compare("abc9", "abc123"));
  47.     System.out.println(new NaturalComparator().compare("abc", "ab9"));
  48.     System.out.println(new NaturalComparator().compare("abc9", "abc001"));
  49.     return;
  50.   }
  51. }. more info on 1point3acres.com
复制代码
回复 支持 反对

使用道具 举报

mdyuki1016 发表于 2016-7-27 03:43:54 | 显示全部楼层
为何都写得如此复杂....
public int compare(String l, String r) {. visit 1point3acres.com for more.
    int b1 = 0, b2 =0;
//find break point. 鍥磋鎴戜滑@1point 3 acres
    while(b1 < l.length() && !Character.isDigit( l.charAt(b1) ) )
        b1++;
    while(b2 < r.length() && !Character.isDigit( r.charAt(b2) ) )
        b2++;. more info on 1point3acres.com

    int cmp = l.substring(0,b1).compareTo(r.substring(0,b2));
    if (cmp == 0) {
        cmp = Integer.parseInt(l.substring(b1)) - Integer.parseInt(r.substring(b2))
    }
    return cmp;
}
回复 支持 反对

使用道具 举报

tigercode 发表于 2016-9-13 12:22:36 | 显示全部楼层
mdyuki1016 发表于 2016-7-27 03:43
为何都写得如此复杂....
public int compare(String l, String r) {
    int b1 = 0, b2 =0;
.鐣欏璁哄潧-涓浜-涓夊垎鍦
abc121a, abc121b
回复 支持 反对

使用道具 举报

null_point_exc 发表于 2016-9-14 02:37:43 | 显示全部楼层
Royal name..一样一样的。。
回复 支持 反对

使用道具 举报

null_point_exc 发表于 2016-9-14 02:44:20 | 显示全部楼层

所以。。。到底怎么比。。如果 abc12abc12   , 那数字是什么。。字母算什么?
回复 支持 反对

使用道具 举报

leixiang5 发表于 2016-9-26 05:48:27 | 显示全部楼层
freemail165 发表于 2016-3-28 04:18
这个知道更好,不知道的话写一下就一行的事
.鏈枃鍘熷垱鑷1point3acres璁哄潧
貌似如果是abc123 abc0009.貌似就fail掉了?
回复 支持 反对

使用道具 举报

zzhmxf 发表于 2016-10-24 11:45:26 | 显示全部楼层
liurudahai 发表于 2016-9-28 02:55
这题难道不是两个指针一起挪,边挪边比,如果都是字符串,直接比大小,相等继续,如果一个是字符串一个是数 ...

我也这么认为
回复 支持 反对

使用道具 举报

tonymuu 发表于 2016-10-24 12:18:30 | 显示全部楼层
数字确定是在string的末尾吗,还是有可能出现在中间?
回复 支持 反对

使用道具 举报

wanglele 发表于 2016-10-27 13:29:08 | 显示全部楼层
如果是abc1 和abc0001 哪个大?  一样大?   如果是abc1a 和abc0001b 哪个大?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-8-17 07:54

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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