QQ登录

只需要一步,快速开始

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

递归

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

14

主题

10

听众

43

积分

升级  40%

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

    [LV.3]偶尔看看II

    自我介绍
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:52 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    截取符串左起字符数(中文是双字节字符,要考虑单字节和双字节的情况)/ }' Q0 Y7 R, p. k: x
    算法:" P+ T- Z6 Y2 M& s3 @
       英文是单字节字符,中文是双字节字符,
    / C7 y* M0 _/ b* |) m   如果要截取n个单字, 则先选取n个字符范围,用slice,这是数据源, m8 ^5 Y* d& ~" J) r

    1 L5 E, a8 I! c9 g8 c0 R0 E   假设n个字符里面,有 k个英文单字,i个中文双字/ Y% G( p8 n; T! J* {
       那么截取的时候只用考虑最右边的i个的字符
    / I- E% ?" ^! _7 m1 g$ C2 s; z
    / r% E+ D. Q5 p, [+ A: a   assume 左边都是英文单字的话,那右边的就全是中文;) e% J3 W, G# O% w4 X* R2 _; G7 I
       如果全是中文,那么有几个中文 就截取几个字符) h( G# D0 X" _; i( q

    ( z6 g1 c; o0 J7 W; j迭代的函数 输入应该是字符串,输出应该是左起的n个字符
    4 C1 H- }! {2 t- }  A: g/ E4 z+ `迭代的最后最小单元应该是输入一个中文,和左起一个字符,但是返回空(这一个可以用slice(1>>1)右移来实现)
    & s( u8 S3 ~/ {9 k7 b+ `
    4 ^. U% t& m4 U: U迭代的函数里面为了加速,应该优先考虑是否全是英文,全是中文的情况,这样就不用迭代,直接输出结果,还应该考虑最右边的字符如果都是英文也不用迭代了,只有右边的字符有中文的时候才用迭代
    / I% n9 f! i4 x: n/ g4 d* F-------------------------------------------------------------------------------------------------------
    5 m6 z3 \- M. S; o% Uif(!String.prototype.leftB){ 8 Z& h7 G( C. f, S
    String.prototype.leftB = function(n){ //n=7" i5 b" H0 Y# ?% i: _! o1 L/ M! u0 Y6 o
    var s = this, //s="ilove我自己"4 R" d) m+ n' }% h/ U/ R+ S
    s2 = s.slice(0, n), //s2="ilove我自"
    # q9 [; k6 u( D. j6 X0 t- T5 \i = s2.replace(/[^\x00-\xff]/g, "**").length; //i=9& N) e  d4 s8 t- Y
    if (i <= n) { / @9 @$ G/ N) C  W5 x- r- x
    return s2; k
    $ c5 L( e4 @$ i9 \4 p}
    + T) f- s. t' V5 a1 c7 X1 Ki -= s2.length;// i=9-7=2 , n =7,几个中文9 s! r* s  D/ a
    switch (i) {
    7 E' q" b( X- v4 W, @case 0: return s2; //全是单字节6 e, T/ ]$ V+ M$ h& X
    case n: return s.slice(0, n >> 1); //全是双字节,比如中文; P( V3 Z) G/ b# `3 q* D, Z
    default:
    3 \7 E: ~. T7 q, `var k = n - i, //k=7-2=5,几个英文字
      A! x0 P1 m& X* f- b8 S2 zs3 = s.slice(k, n), //s.slice(5, 7) s3=我自"0 a4 y% O( U" Z: G, u
    j = s3.replace(/[\x00-\xff]/g, "").length; //如果中文在右边的话,这个算法就是最少复杂度的,判断s3里是否中英文字符,j中文字符数
    3 \$ Q5 `& _; C% Areturn j ? s.slice(0, k) + s3.leftB(j) : s.slice(0, k); //递归!!5 V9 [1 u; X% A# v
    }
    4 _1 I- F4 c9 _  @4 S2 M% Z2 Y} * J$ I8 m* W# H$ f- Z
    }/ D2 W, y4 G  W1 B  C! b. N3 _
    -----------------------------------------------------------------------------------------------------------------
    6 Y& X. Z" ^2 {+ b- E- M" Wvar stringify = function (obj) {) R# }! {8 `' L4 o& Q
        var t = typeof (obj);
    - O. [& `6 `9 ?, Y. `) r4 ^* m1 X9 L; ?    if (t != "object" || obj === null) {' k. E; k9 y0 I! K! @: p
            // simple data type* K% N; D6 z. i! `
            if (t == "string") obj = '"' + obj + '"'; //加引号的作用是,如果是字符串作为obj传进来,是没有双引号的,这时如果直接调用String(obj)只会输出obj ,没有引号!!!!!!!
    ( \+ ?& r, l- }+ M! `7 _        return String(obj);* {+ |) }. M9 Y4 x, u
        } else {
    7 a& G1 A; A) [* q# F        // recurse array or object6 i# |' ]; a  m; ]( `
            var n, v, json = [], arr = (obj && obj.constructor == Array);
    6 R- c* w( q+ `# N$ f" V' E' L" }+ u
            // fix.
    + O% b. I+ k: r, v$ a# l$ v        var self = stringify;- o7 Y( Q. W. `/ `3 V

    4 L$ G$ @+ ^% V- q        for (n in obj) {8 h1 a" _- \8 l' |
                v = obj[n];
    0 F; `" J- H1 s7 S2 f/ Q, g            t = typeof(v);) Y" r% V0 y5 @2 g
                if (obj.hasOwnProperty(n)) {9 y2 f7 E" ?$ y" g& v5 V
                    if (t == "string") {
    % S, \, X( O) x+ i; U0 A8 x                    v = '"' + v + '"'; & j+ x/ m8 k% Z7 g- S" |
                    } else if (t == "object" && v !== null) {& n1 M. d: _( Y+ A  p7 h
                        v = self(v);
    , e! B( h# \7 I* o                }
    3 [0 O, u! q: I# W2 F; h9 _                json.push((arr ? "" : '"' + n + '":') + String(v));
    ( T* l$ m0 M( Z# Q9 Y            }
    % f; V& A  e3 a8 V        }0 H8 p% _0 _8 q2 U3 Q  |/ v/ X
            return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    , L4 ]( }# Z, k* h. _" }    }, J/ G+ N  n( w( y( f2 p
    };
    7 [- k3 `  ^! _% V
    0 q3 K: v9 @+ p/ W( i
    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 11:24 , Processed in 0.418513 second(s), 50 queries .

    回顶部