QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1793|回复: 0
打印 上一主题 下一主题

递归

[复制链接]
字体大小: 正常 放大

14

主题

10

听众

43

积分

升级  40%

  • TA的每日心情
    慵懒
    2015-5-5 09:46
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    自我介绍
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    截取符串左起字符数(中文是双字节字符,要考虑单字节和双字节的情况)
    6 _. B7 s% l6 O4 g* J4 q, q& b算法:0 P2 ^8 w1 D' x0 M7 D+ g4 W
       英文是单字节字符,中文是双字节字符,
    2 M! o1 V/ n2 m* o/ V! U( q   如果要截取n个单字, 则先选取n个字符范围,用slice,这是数据源
    4 A, o% q" A) X/ h' b2 c8 a5 t% O$ F' z; s8 J! a
       假设n个字符里面,有 k个英文单字,i个中文双字
    6 r) g) l* \" n1 e+ O7 g   那么截取的时候只用考虑最右边的i个的字符/ d5 ^# j) Q6 E4 M$ \

    ( ~) C8 M" }6 T   assume 左边都是英文单字的话,那右边的就全是中文;0 S+ {% T/ O6 B2 R& J7 ]2 a6 i
       如果全是中文,那么有几个中文 就截取几个字符- J3 r  e( R* e
    9 {& ~/ w6 i* Z: s! H
    迭代的函数 输入应该是字符串,输出应该是左起的n个字符
    " s" [0 A4 z0 S' w迭代的最后最小单元应该是输入一个中文,和左起一个字符,但是返回空(这一个可以用slice(1>>1)右移来实现)
    ! q' z' n$ u2 K" d; A! X2 X5 m, a2 U& V# n( t2 P
    迭代的函数里面为了加速,应该优先考虑是否全是英文,全是中文的情况,这样就不用迭代,直接输出结果,还应该考虑最右边的字符如果都是英文也不用迭代了,只有右边的字符有中文的时候才用迭代) G# L# Z  H: S
    -------------------------------------------------------------------------------------------------------
    1 s, N: k/ S8 |4 Xif(!String.prototype.leftB){
    8 z- ?) j3 @" E5 l7 b& qString.prototype.leftB = function(n){ //n=7
    . m# F" E( A6 S6 jvar s = this, //s="ilove我自己"0 K1 x* y4 T8 L4 p- D
    s2 = s.slice(0, n), //s2="ilove我自"
    6 [+ n. C$ j: E4 z, L; k4 Ei = s2.replace(/[^\x00-\xff]/g, "**").length; //i=9
    7 a1 `" P, Y0 x# w% j2 }if (i <= n) {
    . A- h! P$ z; z) Freturn s2; k9 Q$ [& i* _5 h# t& a2 {1 {9 @9 ~
    } % T3 ~$ \8 [7 I& j& k, c
    i -= s2.length;// i=9-7=2 , n =7,几个中文
    , x  k2 @" M9 k9 j/ }: _switch (i) {
    ) O, r2 ^0 p5 W2 d2 J  f5 Fcase 0: return s2; //全是单字节
    4 p2 l+ O: l# [+ Y$ _$ Z6 l8 ?7 N) fcase n: return s.slice(0, n >> 1); //全是双字节,比如中文' t5 q1 x+ E8 w) q- K
    default: : ]' G" N' ^6 ?3 G( S4 X, f
    var k = n - i, //k=7-2=5,几个英文字  m; ]6 ?$ C+ Q0 O! Z% ~& A
    s3 = s.slice(k, n), //s.slice(5, 7) s3=我自"
    4 C) y  v) j. nj = s3.replace(/[\x00-\xff]/g, "").length; //如果中文在右边的话,这个算法就是最少复杂度的,判断s3里是否中英文字符,j中文字符数; ~4 N. a" s6 [
    return j ? s.slice(0, k) + s3.leftB(j) : s.slice(0, k); //递归!!
    - m$ e6 [7 ^0 H} , w# ~+ y! a- ~  g9 v
    }
    ' q( V4 `4 v/ P4 c( R; B  P7 T3 U: \! w# Q}
    ; q- \) Q- O+ `; _# e5 g-----------------------------------------------------------------------------------------------------------------
    # T( p4 s0 R) ^5 {: t8 v! D# ^var stringify = function (obj) {
    6 u" \5 a4 r8 U6 O* O4 t    var t = typeof (obj);9 E+ M% J7 L! w: [' ?
        if (t != "object" || obj === null) {
    6 w/ V" s  i0 u0 b0 s0 j  K1 V* i        // simple data type
      @7 i' }, X& m0 S* Q( T- f3 K9 N# P        if (t == "string") obj = '"' + obj + '"'; //加引号的作用是,如果是字符串作为obj传进来,是没有双引号的,这时如果直接调用String(obj)只会输出obj ,没有引号!!!!!!!
    % ~* }/ z9 R6 @& Y0 S) f8 w        return String(obj);- J2 ^$ P. i9 ^! ~, t
        } else {2 t1 t8 C+ Q. i6 E/ I
            // recurse array or object
    9 ?3 W" o8 T$ c9 L, h5 m4 T+ x        var n, v, json = [], arr = (obj && obj.constructor == Array);
    4 V  k; n# J% `9 j; u; E
    $ d$ ]- u" o3 z6 k2 n3 r        // fix.
      G2 S. J' Y& z7 A9 _8 S        var self = stringify;8 f! d+ ^: U' V  M# |; Y

    * X2 u& S% X& Z7 C        for (n in obj) {4 ?7 @+ o- y0 `9 u
                v = obj[n];
    % v, g. ^7 o$ w8 x$ D            t = typeof(v);% M0 g4 `) A! Q- ^$ g! |0 H" \9 s
                if (obj.hasOwnProperty(n)) {
    / T( Q5 `1 n( V# V" g" D2 Y                if (t == "string") {2 h& a& \# l3 @
                        v = '"' + v + '"';
    ( t- T3 {. R4 q3 o* Z6 C& @+ p" y* G                } else if (t == "object" && v !== null) {
    - b5 y+ }. e3 ~                    v = self(v);8 p! J& g! `0 z4 o% U' K; R& A
                    }
    . }; G: E4 O$ P- S( h                json.push((arr ? "" : '"' + n + '":') + String(v));
    $ w5 b$ v+ H4 }1 s            }
    6 {2 [+ {, m! ~3 _. ]7 [- G        }
    : \4 K3 A  o5 b$ U1 M        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    1 o8 t( n9 J  {9 g# P. ~    }) W- h2 u$ P3 |* }: \
    };3 n) l" V5 {$ N! u8 d

    * f% N/ T9 {& a' y
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-12 22:36 , Processed in 0.606237 second(s), 50 queries .

    回顶部