題目:給定一字串只包含數字,請寫乙個演算法,找出該字串中的最長不重複子串(不重複是指子串中每一元素不同於子串中其他元素)
如: 「120135435」最長不重複子串為 「201354」
**:
方法一:
//輔助陣列,o(n*n)
private
static string norepeatsubstring(string str)else
}if((j==str.length())&&(j-i>maxlength))
}system.out.println(maxindex);
return
str.substring(maxindex, maxindex+maxlength-1);
}
方法二:
/**
* 陣列dp儲存到下標i的最大子陣列長度
* 比如字串"aabcdb"
* 則dp[0]=1(a),dp[1]=1(a),dp[2]=2(ab),dp[3]=3(abc),dp[4]=4(abcd),dp[5]=3(cdb)
* o(n*n)
* 可改進
*@param str
*@return
*/private
static string norepeatsubstring1(string str)else
if(j==last_start)
}if(dp[i]>maxlen)
}return str.substring(maxindex, maxindex+maxlen-1);
}
方法三:
/**時間複雜度o(n)
* 120135435
*@param str
*@return
*/private
static string norepeatsubstring2(string str)
for(int i=0;i0;
}visit[str.charat(0)-'0'] = 0;
dp[0] = 1;
for(int i=1;iint tmp = str.charat(i)-'0';
if(visit[tmp]==-1)elseelse
}if(dp[i]>maxlen)
}return str.substring(maxindex, maxlen+maxindex-1);
}
改進方法三:
/**
* norepeatsubstring2的優化
*@param str
*@return
*/private
static string norepeatsubstring3(string str)
visit[str.charat(0)-'0'] = 0;
for(int i=1;iint tmp = str.charat(i)-'0';
if(visit[tmp]==-1)else
}if(count>maxlen)
}return str.substring(maxindex, maxlen+maxindex-1);
}
資料結構之最大子串
給定整數串,a 1,a 2,a n,求最大子串的問題,下面給出三種方法 include include include vector1.h include tree.h using namespace std int maxsubsequence int numarr,int len 方法1 int...
最大子串演算法
最大子串問題是一類經典問題,即在一串整形陣列中選取和最大的子串 給出問題描述 對於乙個包含負值的數字串array 1.n 要找到他的乙個子串array i.j 0 i j n 使得在array的所有子串中,array i.j 的和最大。針對本問題,可有三種方法,一種是暴利破解列舉演算法,所有子串種類...
leetcode刷題之最大子串行和
這個題的思路在於,如果之前序列的值小於0,那麼,它則對最大的和只有 應當拋棄掉 如果不小於0,則可以使用,向序列中新增新值並且判斷當前的最大值。class solution def maxsubarray self,nums list int int temp nums 0 maxnum temp ...