一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 3353|回复: 16
收起左侧

facebook电面

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

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

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
一个笑呵呵的三哥,出了道题:自然string comparator。不知道的搜下。就是string 比较的时候考虑里面数字的大小,比如 abc9 < abc123 abc > ab9  因为char比digit重要。写的很顺利,最后run了test case 人家也说没问题。 然后就结束了。结果下了我自己ide跑发现有case 没cover,不知道他怎么想的,求过!求bless。
-google 1point3acres
要的就是这样:
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 | 显示全部楼层
这题难道不是两个指针一起挪,边挪边比,如果都是字符串,直接比大小,相等继续,如果一个是字符串一个是数字,直接字符串胜,如果两个都是数字,同时遍历到数字的末尾,把整个数字取下来,对数字比大小,赢得胜,如果相等再继续重复上面的过程,如果到一个字符串已经完了还是相等,那么如果另一个字符串也同时遍历完的话就相等,不然另一个字符串胜
回复 支持 1 反对 0

使用道具 举报

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

使用道具 举报

 楼主| kungfucop 发表于 2016-3-23 12:19:57 | 显示全部楼层
lzm0909 发表于 2016-3-23 09:44
请问这种情况是哪个大?  abc9,  abc001

abc9大,001要作为一个部分处理。
回复 支持 反对

使用道具 举报

freemail165 发表于 2016-3-28 03:46:09 | 显示全部楼层
试着写了一下,有些pseudo code... visit 1point3acres.com for more.

public int compare(String a,String b) {
    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.
              // if same indexa++;indexb++; compare next

       } else if(isDigit(cura)) {
                 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
回复 支持 反对

使用道具 举报

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

Character.isAlphabetic() 这个很有用

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> {. 1point 3acres 璁哄潧
  2.         /**
  3.          * return negative num if l < r 0 if l == r positive if l > r
  4.          */
  5.         public static void main(String[] args) {. From 1point 3acres bbs
  6.                 NaturalComparator nc = new NaturalComparator();
  7.                 System.out.println(nc.compare("abc8b", "abc7a"));
  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))) {. From 1point 3acres bbs
  14.                                 i++;
  15.                                 j++;
  16.                         } else {
  17.                                 if (Character.isDigit(l.charAt(i)) && Character.isDigit(r.charAt(j))) {
  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');
  26.                                                 j++;
  27.                                         }
  28.                                         if (num1 < num2) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  29.                                                 return -1;.鐣欏璁哄潧-涓浜-涓夊垎鍦
  30.                                         } else if (num1 > num2){. visit 1point3acres.com for more.
  31.                                                 return 1;
  32.                                         }
  33.                                 } else {
  34.                                         if (Character.isDigit(l.charAt(i))) {
  35.                                                 return -1;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  36.                                         } else if (Character.isDigit(r.charAt(j))) {
  37.                                                 return 1;.鏈枃鍘熷垱鑷1point3acres璁哄潧
  38.                                         } else {
  39.                                                 if (l.charAt(i) < r.charAt(j)) {
  40.                                                         return -1;
  41.                                                 } else {. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  42.                                                         return 1;
  43.                                                 }
  44.                                         }
  45.                                        
  46.                                 }. more info on 1point3acres.com
  47.                         }. Waral 鍗氬鏈夋洿澶氭枃绔,
  48.                 }
  49.                 if (i == l.length() && j == r.length()) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  50.                         return 0;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  51.                 }
  52.                 if (i == l.length()) {
  53.                         return -1;
  54.                 } else {
  55.                         return 1;
  56.                 }
  57.         }
  58. }
复制代码
回复 支持 反对

使用道具 举报

sealove999 发表于 2016-4-4 15:12:08 | 显示全部楼层
  1. class NaturalComparator implements Comparator<String> {
  2.   /**. Waral 鍗氬鏈夋洿澶氭枃绔,
  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()). From 1point 3acres bbs
  9.       return 1;
  10.     if (l.isEmpty() && r.isEmpty())
  11.       return 0;

  12.     int ll = 0;
  13.     while (ll < l.length() && Character.isDigit(l.charAt(ll))) {
  14.       ll++;
  15.     }
  16.     int rr = 0;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  17.     while (rr < r.length() && Character.isDigit(r.charAt(rr))) {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  18.       rr++;
  19.     }
  20. . 1point3acres.com/bbs
  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));
  27.       int rrr = Integer.parseInt(r.substring(0, rr));. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  28.       if (lll != rrr) {
  29.         return lll - rrr;-google 1point3acres
  30.       } else {
  31.         return compare(l.substring(ll), r.substring(rr));.鏈枃鍘熷垱鑷1point3acres璁哄潧
  32.       }.1point3acres缃
  33.     } else {
  34.       if (l.charAt(0) != r.charAt(0)) {
  35.         return l.charAt(0) - r.charAt(0);
  36.       } else {. 鍥磋鎴戜滑@1point 3 acres
  37.         return compare(l.substring(1), r.substring(1));
  38.       }. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  39.     }
  40.   }. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  41. }.鐣欏璁哄潧-涓浜-涓夊垎鍦


  42. public class Solution {
  43.   public static void main(String[] args) {
  44.     System.out.println(new NaturalComparator().compare("abc9", "abc123"));
  45.     System.out.println(new NaturalComparator().compare("abc", "ab9"));.1point3acres缃
  46.     System.out.println(new NaturalComparator().compare("abc9", "abc001"));
  47.     return;
  48.   }. 1point3acres.com/bbs
  49. }
复制代码
回复 支持 反对

使用道具 举报

mdyuki1016 发表于 2016-7-27 03:43:54 | 显示全部楼层
为何都写得如此复杂..... 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
public int compare(String l, String r) {. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
    int b1 = 0, b2 =0;
//find break point.1point3acres缃
    while(b1 < l.length() && !Character.isDigit( l.charAt(b1) ) )
        b1++;.1point3acres缃
    while(b2 < r.length() && !Character.isDigit( r.charAt(b2) ) )
        b2++;

    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
这个知道更好,不知道的话写一下就一行的事
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
貌似如果是abc123 abc0009.貌似就fail掉了?
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 04:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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