QQ登录

只需要一步,快速开始

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

递归

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

14

主题

10

听众

43

积分

升级  40%

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

    [LV.3]偶尔看看II

    自我介绍
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    截取符串左起字符数(中文是双字节字符,要考虑单字节和双字节的情况)! [% _9 F) |( c  K/ ~
    算法:  @6 Y) O2 {0 K; H; E5 b6 ?! P
       英文是单字节字符,中文是双字节字符,6 Q: r9 W! A( T7 b$ r
       如果要截取n个单字, 则先选取n个字符范围,用slice,这是数据源
    % X; Q6 Q) Y& q6 J2 b7 Z4 D: q- b+ ?: ]5 ?+ p
       假设n个字符里面,有 k个英文单字,i个中文双字
    ( u) E6 c( d. a& p" Z   那么截取的时候只用考虑最右边的i个的字符2 Q9 ?' n5 a8 |! y% C$ d( u
    + Z1 K) l4 y4 @& V' p, m
       assume 左边都是英文单字的话,那右边的就全是中文;. N  O, f) a% m5 w) W9 a/ J4 R
       如果全是中文,那么有几个中文 就截取几个字符
    + ]& M. E5 C0 u! Q: {4 ^0 h
    7 C4 ?3 O7 l( u$ }/ C迭代的函数 输入应该是字符串,输出应该是左起的n个字符
    " b$ K5 S/ l4 i* d迭代的最后最小单元应该是输入一个中文,和左起一个字符,但是返回空(这一个可以用slice(1>>1)右移来实现)
    & j/ I, A/ _  A$ L/ t% I. J& Q% F3 d5 `+ D* j& E
    迭代的函数里面为了加速,应该优先考虑是否全是英文,全是中文的情况,这样就不用迭代,直接输出结果,还应该考虑最右边的字符如果都是英文也不用迭代了,只有右边的字符有中文的时候才用迭代1 F: c' F) W+ b1 s; G9 M3 }
    -------------------------------------------------------------------------------------------------------* i. K+ @. H8 F: M/ g6 r( Q( Y6 j$ h
    if(!String.prototype.leftB){
    # o$ A9 L, X2 _+ _5 N" }String.prototype.leftB = function(n){ //n=7
    9 O1 x/ i- f0 b0 Wvar s = this, //s="ilove我自己"9 a8 P' \9 u& s' t) y3 j; D$ `
    s2 = s.slice(0, n), //s2="ilove我自"2 d+ b/ r! h/ U7 G
    i = s2.replace(/[^\x00-\xff]/g, "**").length; //i=9* X$ A% M$ I  r/ l8 H" {' O
    if (i <= n) { ; v% [+ H0 q5 a8 \9 J7 E) F
    return s2; k3 O9 y9 u5 W: o: d8 a
    }
    ( x1 U$ S% z( _, y% I2 Q- Q# j, Ni -= s2.length;// i=9-7=2 , n =7,几个中文% w4 Y' R( x9 U1 K1 w) q7 W" g
    switch (i) { ( c$ ]2 ]& H7 a% d, G% n
    case 0: return s2; //全是单字节) e$ S' V) N( D" g
    case n: return s.slice(0, n >> 1); //全是双字节,比如中文
    : t3 }4 [9 g1 b4 B& Rdefault:
    / Z9 }# I( S0 `" y  nvar k = n - i, //k=7-2=5,几个英文字: p2 b& t$ X0 @/ s& M9 o) G
    s3 = s.slice(k, n), //s.slice(5, 7) s3=我自": Q( P' X: H) a% D0 a
    j = s3.replace(/[\x00-\xff]/g, "").length; //如果中文在右边的话,这个算法就是最少复杂度的,判断s3里是否中英文字符,j中文字符数
    - W6 V9 i' u/ dreturn j ? s.slice(0, k) + s3.leftB(j) : s.slice(0, k); //递归!!' |$ O3 _4 q+ v; R; x
    } + |- w2 m* @: u7 I6 @
    } & ?) K/ O1 V. }+ j2 V* }% t+ A- N
    }
    ' m* g- B7 u5 E  h5 o" y- |-----------------------------------------------------------------------------------------------------------------: @7 q/ Y: ?1 H2 P
    var stringify = function (obj) {8 V; J& W/ x/ u0 j
        var t = typeof (obj);9 }* @3 f, |0 e1 h( h+ j& N
        if (t != "object" || obj === null) {
    3 m0 |2 @$ w% D  k( l6 ]        // simple data type
    , F* j# {  U  W- z        if (t == "string") obj = '"' + obj + '"'; //加引号的作用是,如果是字符串作为obj传进来,是没有双引号的,这时如果直接调用String(obj)只会输出obj ,没有引号!!!!!!!7 ]) J& S& Z2 t! \
            return String(obj);* B& `0 d! z  P& }0 _/ z
        } else {
    $ F" v) q( t" R: v6 z- Q        // recurse array or object
    * N+ z4 y; U7 h9 \! l; a        var n, v, json = [], arr = (obj && obj.constructor == Array);
    $ j/ N% Y5 M$ }0 r6 w% Q' I) N& O" }# p' N  |
            // fix.% |, w+ N, [  m* O1 v2 o* p
            var self = stringify;
    % }/ e% a0 P. t# O- l! v5 ~2 h& |, m8 x4 H/ G3 _1 i* D
            for (n in obj) {/ O$ L+ r6 D9 q/ P# E) N4 L$ F1 O
                v = obj[n];
    & `- L) H; I& Y9 r/ c            t = typeof(v);
    ) M- M  P5 y8 G. L            if (obj.hasOwnProperty(n)) {1 ?; L5 D& X5 C9 G6 ~- j
                    if (t == "string") {
    - Y) G- g. k0 V# [, Z                    v = '"' + v + '"';
    9 O8 Z% J4 F; E8 Q                } else if (t == "object" && v !== null) {
    ' y$ D9 F5 @* y8 L                    v = self(v);; ~: {, q: w1 C, [
                    }. I4 C' S5 V4 Q" a& K1 }& N
                    json.push((arr ? "" : '"' + n + '":') + String(v));
    # _- H& h8 a  C6 C! q& w            }( E! H2 h, |* c; r
            }
    $ `* E5 l. P) q        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");9 R& \2 d- B$ \/ R/ V" F% V% w
        }
    : x0 C3 [& s3 C( t) y};
    - `3 }2 Q, b# c4 m6 {9 k
    0 g" j' x/ B, B9 m& i- J
    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-4-16 23:08 , Processed in 0.439757 second(s), 50 queries .

    回顶部