QQ登录

只需要一步,快速开始

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

递归

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

14

主题

10

听众

43

积分

升级  40%

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

    [LV.3]偶尔看看II

    自我介绍
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    截取符串左起字符数(中文是双字节字符,要考虑单字节和双字节的情况); Q5 W) J& t3 k4 ^- j6 W
    算法:0 M4 @, K/ n$ k$ J' k! q
       英文是单字节字符,中文是双字节字符,
    0 K( E. R5 J) m) _   如果要截取n个单字, 则先选取n个字符范围,用slice,这是数据源/ Y0 A% W- u8 T# \; b# w0 Q' t5 ~
    ( w3 o4 v0 g) K  f( e+ ?" _8 _
       假设n个字符里面,有 k个英文单字,i个中文双字
    3 T( W1 k7 C6 \) r  b4 I+ @  R6 n   那么截取的时候只用考虑最右边的i个的字符0 u& G, Y9 u* A
    4 Q, p/ p+ m  E  u" Q% |
       assume 左边都是英文单字的话,那右边的就全是中文;- S* a' g0 e- {- d3 R. h
       如果全是中文,那么有几个中文 就截取几个字符7 ^% g, c4 t; y
    $ g0 C# r; t& \* @7 e* C; q- ?* Y
    迭代的函数 输入应该是字符串,输出应该是左起的n个字符
    5 A3 U- _7 m+ T5 d5 U3 Y' a迭代的最后最小单元应该是输入一个中文,和左起一个字符,但是返回空(这一个可以用slice(1>>1)右移来实现)& F6 P/ O' u4 a7 b5 I* t. G  p
    3 w/ Y" w# R& p( x  U5 x: h
    迭代的函数里面为了加速,应该优先考虑是否全是英文,全是中文的情况,这样就不用迭代,直接输出结果,还应该考虑最右边的字符如果都是英文也不用迭代了,只有右边的字符有中文的时候才用迭代
    + ^8 ^- M0 f9 `$ K6 A* f2 R-------------------------------------------------------------------------------------------------------0 D7 V7 f. _, v9 E
    if(!String.prototype.leftB){
    # @. _. I1 [8 U: b: O3 nString.prototype.leftB = function(n){ //n=7
    6 h( [4 |5 S+ y/ Ovar s = this, //s="ilove我自己"& {% u6 E& w$ Z2 S% {
    s2 = s.slice(0, n), //s2="ilove我自"
    1 f" m9 {% Z+ f( _0 ci = s2.replace(/[^\x00-\xff]/g, "**").length; //i=9
    . c6 H2 V) }5 v6 Cif (i <= n) {
    . J* x& w5 l: [) greturn s2; k2 R% N. A4 H/ }1 p% l4 J5 l' Y) ^+ t+ ?6 S
    }
    4 w1 G3 k* V2 Vi -= s2.length;// i=9-7=2 , n =7,几个中文
    " U( l4 I# G$ x- s; p6 Q; V# eswitch (i) {
    - i- e8 e: e/ ^case 0: return s2; //全是单字节
    5 }- |# h4 q5 W9 U- U7 tcase n: return s.slice(0, n >> 1); //全是双字节,比如中文
    & {7 N6 i  \: C( C  `+ h2 C- rdefault:
    0 @, I  S6 C. t+ Z0 pvar k = n - i, //k=7-2=5,几个英文字* }; F  `( F+ W# d2 ?
    s3 = s.slice(k, n), //s.slice(5, 7) s3=我自"  P' n* f: _* E# P0 Z
    j = s3.replace(/[\x00-\xff]/g, "").length; //如果中文在右边的话,这个算法就是最少复杂度的,判断s3里是否中英文字符,j中文字符数! |1 g: q2 ?9 C0 P0 O4 G
    return j ? s.slice(0, k) + s3.leftB(j) : s.slice(0, k); //递归!!- H2 Z7 i$ I2 x& p
    } ' D# W# a# P: h
    } ) S2 l+ O* h! Y1 V2 y; e; D
    }$ Y8 p8 ^# y4 _7 i
    -----------------------------------------------------------------------------------------------------------------
    ! ~" K# w( [! H* s1 E4 y  x+ uvar stringify = function (obj) {: m1 H' s" O1 L  }9 q, e2 \6 Q
        var t = typeof (obj);# _5 S4 ~0 ]3 w/ p5 _" }  B
        if (t != "object" || obj === null) {
    9 Z6 d+ m/ ], O/ |, X& n" ^        // simple data type" g7 S+ v: f( U* z7 w
            if (t == "string") obj = '"' + obj + '"'; //加引号的作用是,如果是字符串作为obj传进来,是没有双引号的,这时如果直接调用String(obj)只会输出obj ,没有引号!!!!!!!6 E# `; ]. _1 }- w7 @# `+ S
            return String(obj);! l7 @2 U6 A- m
        } else {4 J: f7 t7 u5 P7 D, y5 ~- Q. k7 t
            // recurse array or object9 W8 X2 d9 O  H: y
            var n, v, json = [], arr = (obj && obj.constructor == Array);1 @3 P6 N3 v0 D# j# L$ p+ T

    # Q+ u: @- X! |7 y        // fix.
    ! u* K; ]7 k6 _/ k+ i        var self = stringify;
    9 U& x/ [: w9 q; [% B3 {) U3 s: C; n% L. N, j! m) m
            for (n in obj) {" t' o% ?3 y9 P9 `
                v = obj[n];. r* Z  j7 c  D9 t+ K; H
                t = typeof(v);2 p5 t5 n6 O/ P* N9 i
                if (obj.hasOwnProperty(n)) {
    * B- C- E3 P' O' x                if (t == "string") {5 z8 d* o4 c1 ^) B+ ?3 b
                        v = '"' + v + '"';
    + k+ u2 S2 H0 g( G4 B                } else if (t == "object" && v !== null) {
    - g* h) x! i, N0 M+ m! i                    v = self(v);3 @  f8 G) `$ i# ?  N9 M
                    }5 V2 u) ~  y( |6 s2 W
                    json.push((arr ? "" : '"' + n + '":') + String(v));; }% `! C, F  {" a4 R- Q4 @
                }/ e8 b0 S3 e" c  {
            }' }: ?3 ?4 ]6 l# Q: ~
            return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    3 @; G3 V& ^/ M: u/ b2 w9 E. I    }% r8 D) h: e9 J. X4 }' E' O" U
    };8 o/ `7 K! ~$ Q* c( O* Y

    - [# C: \$ i1 M4 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-9-1 02:28 , Processed in 0.265393 second(s), 50 queries .

    回顶部