当然可以。反复使用indexOf和substring,再加点算法思想就行了。

解决方案 »

  1.   

    >>  13412432145 
    把字符串变成~~
    1133441122443322114455
    就是每个字符都重复一次,长度为2L
    然后~~开始循环
    从第n个字符开始分割,分成两部分 0-n,n+1-2L
    将其中一个字符串翻转
    从零开始比较两个字符串是否相同~~和连续相同的数目并且记录下每个n对应的长度(如果长度为奇数,减一)找最大的
      

  2.   

    简单写了一个,这个找出了所有的<script language="JavaScript">
    <!--
    var str='13412432145';
    /////////////////////////////////
    function __duplicate_str(s){
    var o='';var t='';var l=0;
    l=s.length;for(var i=0;i<l;i++)
    {
    t=s.substr(i,1);o+=t;o+=t;
    }
    return o;
    }
    function __reverse_string(s){
    var o='';var l=0;l=s.length;
    for(var i=l;i>=0;i--)
    o+=s.charAt(i);
    return o;
    }
    function __FindResult(){
    this.N=-1;
    this.I=-1;
    this.Value='';
    }
    function __de_duplicate_str(s){
    var o='';var l=s.length;
    for(var i=0;i<l;i+=2)
    o+=s.charAt(i);
    return o;
    }
    /////////////////////////////////
    var FindResults=new Array();
    var dbStr=__duplicate_str(str);
    var dbStrLen=dbStr.length;
    var RP=0;
    for(var N=2;N<dbStrLen;N++){
    var sLeft=__reverse_string(dbStr.substr(0,N));
    var sRight=dbStr.substr(N,dbStrLen);
    var lLeft=sLeft.length;
    var lRight=sRight.length;
    var lLoop=(lLeft>lRight?lRight:lLeft);
    var FG=false;
    for(var I=0;I<lLoop;I++){
    if(sLeft.charAt(I)==sRight.charAt(I)){
    if(I==0 && N & 0x01 !=0) continue; //跳过N为奇数且I正好指向中间字符的情况
    if(typeof(FindResults[RP])=='undefined')
    {
    FindResults[RP]=new __FindResult();
    FindResults[RP].N=N;
    FindResults[RP].I=I;
    }
    if(FG){
    FindResults[RP].N=N;
    FindResults[RP].Value+=sLeft.charAt(I);
    }else{
    RP++;
    FindResults[RP]=new __FindResult();
    FindResults[RP].N=N;
    FindResults[RP].I=I;
    FindResults[RP].Value+=sLeft.charAt(I);
    }
    FG=true;
    }else{
    FG=false;
    }
    }
    }
    ////////////////////////////
    document.write(dbStr+'<br />');
    document.write(str+'<br />');
    for(I=0;I<FindResults.length;I++)
    document.write(
    I.toString()+' : '+
    (FindResults[I].N/2).toString()+' / '+
    (FindResults[I].I/2).toString()+' / '+
    (FindResults[I].Value.length>>1).toString()+' / '+
    __de_duplicate_str(FindResults[I].Value)+'<br />'
    );
    -->
    </script>
      

  3.   

    顶!哇 写了好长哦!看都看不过来了 你用多长时间写的啊?我自己写了一个 你帮我看看可以实现不?!
    <script languge="javascript">
    function operation()
    {
    var the_string=promt("input the string","");
    string_array1=the_string.split("");
    string_array2=string_array1.reverse();
    var N=string_array1.length;
    var i,j,leng,maxleng;
    maxleng=0;
    for(i=0;i<N;i++)
       for(j=0;j<N;j++)
    {
    leng=0;
    while(string_array1[i]==string_array2[j])
    {
    leng++;
    }
    if(leng>maxleng)
    {
    maxleng=leng;
    }
    }
    window.alert("输入字符窜最大长度为:"+maxleng);
    }
      

  4.   

    eglic!!你的代码有些我看不懂,能不能帮注释一下啊!谢了啊!特别是
    for(var I=0;I<lLoop;I++){
    if(sLeft.charAt(I)==sRight.charAt(I)){
    if(I==0 && N & 0x01 !=0) continue; //跳过N为奇数且I正好指向中间字符的情况
    if(typeof(FindResults[RP])=='undefined')
    {
    FindResults[RP]=new __FindResult();
    FindResults[RP].N=N;
    FindResults[RP].I=I;
    }
    if(FG){
    FindResults[RP].N=N;
    FindResults[RP].Value+=sLeft.charAt(I);
    }else{
    RP++;
    FindResults[RP]=new __FindResult();
    FindResults[RP].N=N;
    FindResults[RP].I=I;
    FindResults[RP].Value+=sLeft.charAt(I);
    }
    FG=true;
    }else{
    FG=false;
    }
    }