演算法題之 最大子串

2021-08-07 13:03:21 字數 1700 閱讀 5975

題目:給定一字串只包含數字,請寫乙個演算法,找出該字串中的最長不重複子串(不重複是指子串中每一元素不同於子串中其他元素)

如: 「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 ...