QQ登录

只需要一步,快速开始

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

递归

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

14

主题

10

听众

43

积分

升级  40%

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

    [LV.3]偶尔看看II

    自我介绍
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    截取符串左起字符数(中文是双字节字符,要考虑单字节和双字节的情况)
    * n, R- G7 |$ }算法:1 [; K# ?: K/ K- p2 ^
       英文是单字节字符,中文是双字节字符," F7 s1 c- M2 A  b3 \
       如果要截取n个单字, 则先选取n个字符范围,用slice,这是数据源
    $ Q) e% |- y7 F- S
    7 J5 M' D; w1 y2 I% Z# j   假设n个字符里面,有 k个英文单字,i个中文双字
    & g  G% R( g$ S9 l# V   那么截取的时候只用考虑最右边的i个的字符/ I8 ~* p) e+ u, |, L2 T4 c

      s( M. w8 @) ?  h  c$ T; Q. D   assume 左边都是英文单字的话,那右边的就全是中文;9 i7 V* [" A/ v" d' n  |
       如果全是中文,那么有几个中文 就截取几个字符
    8 x& T+ J# F* @" v8 ?+ A4 ]$ l% B
    迭代的函数 输入应该是字符串,输出应该是左起的n个字符
    + T' u( G' C/ K9 f迭代的最后最小单元应该是输入一个中文,和左起一个字符,但是返回空(这一个可以用slice(1>>1)右移来实现)! s) Z# c2 {+ A' `
    2 B) i. u: k4 {1 J4 g9 A4 \
    迭代的函数里面为了加速,应该优先考虑是否全是英文,全是中文的情况,这样就不用迭代,直接输出结果,还应该考虑最右边的字符如果都是英文也不用迭代了,只有右边的字符有中文的时候才用迭代! x' b0 ?! j1 H. i! j8 |" m- m' Y
    -------------------------------------------------------------------------------------------------------) @& `& g6 o: o( x# G
    if(!String.prototype.leftB){
    , q  I/ U' [" ~3 u; Q7 a0 TString.prototype.leftB = function(n){ //n=7
    : q; N% C4 f$ Z, Z7 X1 J# |3 Ovar s = this, //s="ilove我自己"
    8 M1 \- _% w& Z- z- M5 _$ ]s2 = s.slice(0, n), //s2="ilove我自"
    # s" E. |! ~! c- l; O0 F1 `i = s2.replace(/[^\x00-\xff]/g, "**").length; //i=9
    2 W" n9 X/ r0 eif (i <= n) {
    1 J$ z- t) \* ]' h. g, Kreturn s2; k
    2 Q" A% K  y5 A! [} 8 j! ?) u1 c8 E9 d/ K) p
    i -= s2.length;// i=9-7=2 , n =7,几个中文9 ~! C" t3 s4 d% l3 ~% d
    switch (i) { : s/ L( E# ~) k) ~; y- J
    case 0: return s2; //全是单字节
    ! X9 g% p* h4 |5 A/ l9 vcase n: return s.slice(0, n >> 1); //全是双字节,比如中文
    6 A' d- X5 O8 Z5 I* \- g0 [0 vdefault:
    8 C( e& b/ B! l& m. x# }var k = n - i, //k=7-2=5,几个英文字
    : I- V0 g% w. |2 xs3 = s.slice(k, n), //s.slice(5, 7) s3=我自"
    + M; q) Y8 l4 K) T; Ij = s3.replace(/[\x00-\xff]/g, "").length; //如果中文在右边的话,这个算法就是最少复杂度的,判断s3里是否中英文字符,j中文字符数
    $ R, s; Z6 C3 l! |# K& ]8 t9 k: Dreturn j ? s.slice(0, k) + s3.leftB(j) : s.slice(0, k); //递归!!9 r$ c* U9 [1 C; h0 K5 t
    }
    2 n8 z  [2 A/ r' O0 ~}
    6 `: H' J4 Y% X0 B& r$ Y! U}  C4 U( D8 M2 h8 I) V
    -----------------------------------------------------------------------------------------------------------------
    7 o: Z, E; j( c& jvar stringify = function (obj) {
    ! u7 m, r/ |/ A( v# n    var t = typeof (obj);  ?4 l% ^/ P$ E
        if (t != "object" || obj === null) {
    5 W& [3 C+ ?3 U8 m        // simple data type! R8 R+ s  ^' b5 |: d
            if (t == "string") obj = '"' + obj + '"'; //加引号的作用是,如果是字符串作为obj传进来,是没有双引号的,这时如果直接调用String(obj)只会输出obj ,没有引号!!!!!!!
    - p; ?( P+ m$ T$ q# }) _$ f1 d        return String(obj);
    - H( z3 N7 [4 x    } else {
    2 D' J2 E; _1 v) X  e        // recurse array or object0 C) e0 r4 w. d( D. f. P$ N/ w
            var n, v, json = [], arr = (obj && obj.constructor == Array);
    8 Y& c: K) Y. C. _7 R
    ! t3 D5 m% o8 g6 B9 M        // fix." M' b6 \, v( Y, ], v7 D  g# ^" M+ x
            var self = stringify;
    ; _5 b6 M4 H+ H9 |( R) R; Z/ P% W3 I# G9 P! X- S
            for (n in obj) {
    5 @' T$ Y) W2 m            v = obj[n];
    ! C: O$ o  }* g3 J- {            t = typeof(v);
    ' `" ]% A& F$ R: R8 z            if (obj.hasOwnProperty(n)) {: J3 p9 O( S$ i2 q/ Y! }
                    if (t == "string") {, W( d9 j9 N; X$ h( r$ a* u
                        v = '"' + v + '"';
    * M7 z, V# |. s. r                } else if (t == "object" && v !== null) {+ a1 v6 ?3 o% \
                        v = self(v);" {# v, y7 I2 v8 f, r  n2 [
                    }0 \& y& f! g: P/ R# `
                    json.push((arr ? "" : '"' + n + '":') + String(v));- S9 r6 _  @! h$ _
                }
    . h, r$ g- [( m9 R0 H# q. O$ W        }
    , d$ o  Z7 N, Y2 y! Z  w        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    : a% g: f$ T7 n( a- C# J# u. c    }
      X- M  q6 K3 T3 n};, a  v" \5 W2 V7 s: Z

    7 j  U, C8 @( w) U! e0 r" \" {
    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 16:12 , Processed in 0.411835 second(s), 49 queries .

    回顶部