May 2009 - May 2017 论坛八周年-你的足迹,我的骄傲


一亩三分地论坛

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

一亩三分地官方iOS手机应用下载
查看: 5190|回复: 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。
. 1point3acres.com/bbs
要的就是这样: 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
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) {}




. from: 1point3acres.com/bbs

评分

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) {
    int indexa=0;
    int indexb=0;-google 1point3acres
    while(indexa<a.length()&&indexb<b.length()) {
         char cura=a.charAt(indexa);
         char curb=b.charAt(indexb);
         if(isLetter(cura)&&isLetter(curb)) {. from: 1point3acres.com/bbs
              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
. 1point3acres.com/bbs
       } else if(isDigit(cura)) {. visit 1point3acres.com for more.
                 return -1;
       } else {
                return 1;
       }
   }
. from: 1point3acres.com/bbs .鐣欏璁哄潧-涓浜-涓夊垎鍦
    if(indexa==a.length()) return -1;
    return 1;
}

. visit 1point3acres.com for more.
补充内容 (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
请问这种情况是哪个大?  abc9,  abc001
. 1point 3acres 璁哄潧
abc9大,001要作为一个部分处理。
回复 支持 反对

使用道具 举报

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

Character.isAlphabetic() 这个很有用

apache commons里的. 1point3acres.com/bbs
NumberUtils.isDigits(str:String):boolean
NumberUtils.isNumber(str:String):boolean
-google 1point3acres
也有用
回复 支持 反对

使用道具 举报

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"));
  8.         }
  9.         public  int compare(String l, String r) {
  10.                 int i = 0;.1point3acres缃
  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++;
  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.                                         }. visit 1point3acres.com for more.
  24.                                         while (j < r.length() && Character.isDigit(r.charAt(j))) {. 鍥磋鎴戜滑@1point 3 acres
  25.                                                 num2 = num2 * 10 + (r.charAt(j) - '0');
  26.                                                 j++;.1point3acres缃
  27.                                         }
  28.                                         if (num1 < num2) {. Waral 鍗氬鏈夋洿澶氭枃绔,
  29.                                                 return -1;. 鍥磋鎴戜滑@1point 3 acres
  30.                                         } else if (num1 > num2){
  31.                                                 return 1;. 鍥磋鎴戜滑@1point 3 acres
  32.                                         }
  33.                                 } else {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  34.                                         if (Character.isDigit(l.charAt(i))) {. from: 1point3acres.com/bbs
  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;. from: 1point3acres.com/bbs
  41.                                                 } else {
  42.                                                         return 1;. 1point3acres.com/bbs
  43.                                                 }
  44.                                         }
  45.                                        
  46.                                 }
  47.                         }
  48.                 }
  49.                 if (i == l.length() && j == r.length()) {
  50.                         return 0;
  51.                 }
  52.                 if (i == l.length()) {
  53.                         return -1;. visit 1point3acres.com for more.
  54.                 } else {
  55.                         return 1;
  56.                 }
  57.         }
  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())
  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.     if (ll == 0 && rr > 0)
  21.       return 1;
  22.     else if (ll > 0 && rr == 0)
  23.       return -1;
  24.     else if (ll > 0 && rr > 0) {. Waral 鍗氬鏈夋洿澶氭枃绔,
  25.       int lll = Integer.parseInt(l.substring(0, ll));
  26.       int rrr = Integer.parseInt(r.substring(0, rr));
  27.       if (lll != rrr) {
  28.         return lll - rrr;
  29.       } else {
  30.         return compare(l.substring(ll), r.substring(rr));
  31.       }
  32.     } else {
  33.       if (l.charAt(0) != r.charAt(0)) {
  34.         return l.charAt(0) - r.charAt(0);
  35.       } else {
  36.         return compare(l.substring(1), r.substring(1));
  37.       }
  38.     }.1point3acres缃
  39.   }.鐣欏璁哄潧-涓浜-涓夊垎鍦
  40. }
  41. . 鍥磋鎴戜滑@1point 3 acres

  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"));
  46.     System.out.println(new NaturalComparator().compare("abc9", "abc001"));
  47.     return;
  48.   } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  49. }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
复制代码
回复 支持 反对

使用道具 举报

mdyuki1016 发表于 2016-7-27 03:43:54 | 显示全部楼层
为何都写得如此复杂....
public int compare(String l, String r) {
    int b1 = 0, b2 =0;. Waral 鍗氬鏈夋洿澶氭枃绔,
//find break point. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
    while(b1 < l.length() && !Character.isDigit( l.charAt(b1) ) )
        b1++;
    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;. 鍥磋鎴戜滑@1point 3 acres
}
回复 支持 反对

使用道具 举报

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
这题难道不是两个指针一起挪,边挪边比,如果都是字符串,直接比大小,相等继续,如果一个是字符串一个是数 ...

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-5-24 01:05

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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