当然可以。反复使用indexOf和substring,再加点算法思想就行了。
解决方案 »
- jquery 实现两个表格之间的数据互换
- 弱弱的问个关于正则去除空格的问题(有代码,求解释)
- 想实现一个简单的功能
- 如何彈出一個置中的視窗
- 如何使用document.getElementsByTagName();方法获取页面所有checkbox对象
- 关于javascript中switch语句,一直有个问题想搞明白.
- 小弟对js不是很懂,希望大家可以帮我解决一个小问题
- style="width:expression(screen.width-0)"中的expression是什么意思,有什么用?
- 请问如何调用javascript文件?
- js向指定位置插入表情或者文字
- 如何取得上传文件的大小
- 那位高人帮忙优化一下这个菜单,不胜感激!!!
把字符串变成~~
1133441122443322114455
就是每个字符都重复一次,长度为2L
然后~~开始循环
从第n个字符开始分割,分成两部分 0-n,n+1-2L
将其中一个字符串翻转
从零开始比较两个字符串是否相同~~和连续相同的数目并且记录下每个n对应的长度(如果长度为奇数,减一)找最大的
<!--
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>
<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);
}
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;
}
}