近期论坛无法登录的解决方案


一亩三分地论坛

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

一亩三分地官方iOS手机应用下载
查看: 5511|回复: 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。. visit 1point3acres.com for more.
.鐣欏璁哄潧-涓浜-涓夊垎鍦
要的就是这样:
static class NaturalComparator implements Comparator<String> {
    /**
     * return negative num if l < r
     0  if l == r
     positive if l > r
     */. 1point 3acres 璁哄潧
    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) {
    int indexa=0;. from: 1point3acres.com/bbs
    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;. From 1point 3acres bbs
       }
   }.鏈枃鍘熷垱鑷1point3acres璁哄潧

    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
请问这种情况是哪个大?  abc9,  abc001

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

使用道具 举报

dimi 发表于 2016-3-28 04:06:34 | 显示全部楼层
. 鍥磋鎴戜滑@1point 3 acres
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. From 1point 3acres bbs
Character.isAlphabetic() 这个很有用

apache commons里的
. 鍥磋鎴戜滑@1point 3 acres
这个知道更好,不知道的话写一下就一行的事
回复 支持 反对

使用道具 举报

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) {. visit 1point3acres.com for more.
  6.                 NaturalComparator nc = new NaturalComparator();-google 1point3acres
  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()) {. 鍥磋鎴戜滑@1point 3 acres
  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))) {. 1point3acres.com/bbs
  21.                                                 num1 = num1 * 10 + (l.charAt(i) - '0');
  22.                                                 i++;
  23.                                         }. more info on 1point3acres.com
  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){
  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;
  38.                                         } else {.鐣欏璁哄潧-涓浜-涓夊垎鍦
  39.                                                 if (l.charAt(i) < r.charAt(j)) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  40.                                                         return -1;
  41.                                                 } else {
  42.                                                         return 1;
  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;
  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()). 鍥磋鎴戜滑@1point 3 acres
  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.     }.鏈枃鍘熷垱鑷1point3acres璁哄潧
  16.     int rr = 0;
  17.     while (rr < r.length() && Character.isDigit(r.charAt(rr))) {
  18.       rr++;.鏈枃鍘熷垱鑷1point3acres璁哄潧
  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) {. more info on 1point3acres.com
  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.     }
  39.   }
  40. }


  41. . 1point 3acres 璁哄潧
  42. public class Solution {
  43.   public static void main(String[] args) {. Waral 鍗氬鏈夋洿澶氭枃绔,
  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;
//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));. more info on 1point3acres.com
    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. 鍥磋鎴戜滑@1point 3 acres
这个知道更好,不知道的话写一下就一行的事
. 1point 3acres 璁哄潧
貌似如果是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-6-22 22:28

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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