QQ登录

只需要一步,快速开始

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

递归

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

14

主题

10

听众

43

积分

升级  40%

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

    [LV.3]偶尔看看II

    自我介绍
    跳转到指定楼层
    1#
    发表于 2015-4-15 09:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    截取符串左起字符数(中文是双字节字符,要考虑单字节和双字节的情况)
    9 K6 m) X# P9 ?0 h  q: g算法:$ j( [% u- ~% A- w1 [
       英文是单字节字符,中文是双字节字符,! P" o6 ]. Q% ?" t
       如果要截取n个单字, 则先选取n个字符范围,用slice,这是数据源3 L: i" t$ v8 R- t5 h& \! ^
    % b8 ~6 T+ ?+ |/ z/ U
       假设n个字符里面,有 k个英文单字,i个中文双字
    6 Q1 J! Z$ l  S. S! W9 F+ f' y   那么截取的时候只用考虑最右边的i个的字符2 `/ \. Q: s5 `, F) \# r; L; p

    - |& `( B( G- S/ H! B$ W) f   assume 左边都是英文单字的话,那右边的就全是中文;
    * A3 Q% o; j+ x- ]* t* p   如果全是中文,那么有几个中文 就截取几个字符
    ( F- g* H9 u) j6 Y" \; k# P+ a/ F: B+ O0 b! K9 q" J
    迭代的函数 输入应该是字符串,输出应该是左起的n个字符* ^2 D2 N* S! K* L
    迭代的最后最小单元应该是输入一个中文,和左起一个字符,但是返回空(这一个可以用slice(1>>1)右移来实现)& t3 F; x% y! M

    6 E7 v# p6 o' Y5 V2 u7 |/ ]迭代的函数里面为了加速,应该优先考虑是否全是英文,全是中文的情况,这样就不用迭代,直接输出结果,还应该考虑最右边的字符如果都是英文也不用迭代了,只有右边的字符有中文的时候才用迭代
    7 ]" ]* r# m( |-------------------------------------------------------------------------------------------------------
      {5 m) A% Y5 ~% |# jif(!String.prototype.leftB){
    9 x: r4 h" j7 v; d  i7 FString.prototype.leftB = function(n){ //n=7
    & C. |9 K2 i" b* mvar s = this, //s="ilove我自己"/ t% a7 {% z" t9 I2 [
    s2 = s.slice(0, n), //s2="ilove我自"
    3 a" z) W. H2 D7 }i = s2.replace(/[^\x00-\xff]/g, "**").length; //i=9, @, f% H( l+ p! x" S
    if (i <= n) { : y' G! f. u0 B" g' ~
    return s2; k
    % @' S$ W9 J4 s4 `$ {  {2 T}
    : ^8 `% ?; D+ K2 ~- b/ F, }1 {i -= s2.length;// i=9-7=2 , n =7,几个中文
    2 C/ {5 b: k$ v4 M5 Cswitch (i) { $ _( \' {7 d7 m) F( K
    case 0: return s2; //全是单字节
    2 M; I, F! l7 R0 r) I. f; ^' z/ vcase n: return s.slice(0, n >> 1); //全是双字节,比如中文8 i3 U+ P6 A+ h: y; c, l0 P
    default:
      v4 c( _. r5 W" Y, n4 m4 zvar k = n - i, //k=7-2=5,几个英文字2 g$ J' w6 L. x* g" _1 N
    s3 = s.slice(k, n), //s.slice(5, 7) s3=我自"% G2 j/ ]- I& o, N3 x% ]( Z$ l
    j = s3.replace(/[\x00-\xff]/g, "").length; //如果中文在右边的话,这个算法就是最少复杂度的,判断s3里是否中英文字符,j中文字符数
    ( H  G; `' ~* G8 Y" oreturn j ? s.slice(0, k) + s3.leftB(j) : s.slice(0, k); //递归!!: M8 i5 \' p2 r2 M; g% @8 X
    }
    & l) c& k' _% ?5 n} , D; o# l2 I5 Z' N/ \- {
    }
    * F8 P7 I8 k/ j; s8 J. H- w$ p-----------------------------------------------------------------------------------------------------------------2 i; m( U7 E( w8 d; Z5 A
    var stringify = function (obj) {& V; g  y1 ^7 s
        var t = typeof (obj);
    ' X6 p* O3 t# A/ }% d6 y    if (t != "object" || obj === null) {
    : r7 M+ x7 b5 m+ S( f( P4 |2 a        // simple data type; f! e: |2 @6 e- f6 N/ B0 q9 }
            if (t == "string") obj = '"' + obj + '"'; //加引号的作用是,如果是字符串作为obj传进来,是没有双引号的,这时如果直接调用String(obj)只会输出obj ,没有引号!!!!!!!
    , }1 S2 o0 V5 ?3 }  @; U        return String(obj);
    ) A( j) C7 L0 k9 u& z6 [; K5 c    } else {
    8 A) a4 P( j+ u4 y% X        // recurse array or object
    * \7 C! O# V$ Z2 \        var n, v, json = [], arr = (obj && obj.constructor == Array);
    # S) ]0 m6 v; E% J8 ~4 s3 C$ j, V  e% A9 ?: q
            // fix.
    0 S4 L$ @7 m$ j4 L' ~( n; w        var self = stringify;
    : p" c" x) l& e/ y' t. W, X
    ) c0 H7 ?' X/ |. B/ Z& l        for (n in obj) {  s  S* @% U5 F+ s4 J5 `9 D4 {
                v = obj[n];
    . T  U) M+ x6 z' J" |! d# i* O/ t            t = typeof(v);
    " p: W& U( `) h5 j( E4 W            if (obj.hasOwnProperty(n)) {
    ! X- f8 J7 C% N+ Z" j" _7 k4 |                if (t == "string") {0 `. d6 @" q* s4 C
                        v = '"' + v + '"'; . Z. Z3 Y0 [0 `! C6 i0 R
                    } else if (t == "object" && v !== null) {% z: h7 R6 P# X+ }) ], z
                        v = self(v);1 u* X# d8 I3 C6 ^" Q1 T
                    }: @. p+ v3 o8 Z
                    json.push((arr ? "" : '"' + n + '":') + String(v));
    7 z8 `" [: r9 b- z# L' Q8 {            }
    + d# D% d3 ]8 ]' g- J0 m        }2 I* i8 G, `" c5 ]$ Z: @! K
            return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    # C( e2 ]/ k( [9 c! Y    }
    ! q$ p0 N4 P: I};8 m& A, ?* w$ m" u
    ; X2 ^% t* Q0 J7 a  c* q3 b+ x
    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-11 16:55 , Processed in 0.399751 second(s), 50 queries .

    回顶部