方法一:
思想
由大到小的擷取並返回 保證如果返回肯定是返回最大的
短字串的處方式:第一次for迴圈:遞減 。第二次for迴圈 :擷取該長度字串的可行方案個數 然後擷取
長字串長度處理方案:擷取"第一次擷取的字串" 可行方案個數 兩次擷取內容一致,返回
1、獲得最長公共子串行--可以 返回 「最長公共子串行的長度」 或者 「最長公共子串行」
public static int getmaxsubstr( string str1, string str2)}}
}
寫了乙個注釋
public static int getmaxsubstr( string str1, string str2)}}
}
2、自定義相似度
public static double getsimilardegree( string str1, string str2)
3、測試
public static void main(string args)
else
}
方法二 求 最長遞增子串行
使用回溯法
最長遞增序列不要求陣列元素連續問題,返回遞增序列長度和遞增序列。o(n^2)做法,順序比較以第i個元素開頭的遞增序列即可。
利用動態規劃來做,假設陣列為1, -1, 2, -3, 4, -5, 6, -7。我們定義lis[n]陣列,其中lis[i]用來表示以array[i]為最後乙個元素的最長遞增子串行。
使用i來表示當前遍歷的位置:
當i = 0 時,顯然,最長的遞增序列為(1),則序列長度為1。則lis[0] = 1
當i = 1 時,由於-1 < 1,因此,必須丟棄第乙個值,然後重新建立序列。當前的遞增子串行為(-1),長度為1。則lis[1] = 1
當i = 2 時,由於2 > 1,2 > -1。因此,最長的遞增子串行為(1, 2),(-1, 2),長度為2。則lis[2] = 2。
當i = 3 時,由於-3 < 1, -1, 2。因此,必須丟掉前面的元素,重建建立序列。當前的遞增子串行為(-3),長度為1。則lis[3] = 1。
依次類推之後,可以得出如下結論。
lis[i] = max, array[i] >array[k], for any k < i
最後,我們取max。
public static void getlongestascsequence(int input,int size)
if (maxlen < arr[i])
}system.out.println(maxlen);
}
附:最大子陣列之積
題目描述: 給定乙個長度為n的整數陣列,只允許用乘法,計算任意(n-1)個數的組合中乘積最大的一組。
演算法分析: 動態規劃的做法,假設陣列為a[n],max[n]表示以下標為i結尾的子陣列乘積最大值,min[n]表示以下標為i結尾的子陣列乘積最小值。
為了處理陣列元素為負的問題,必須將最小乘積也儲存起來。 很容易想到,若當前元素a[i]為負數,那麼a[i]*max[i-1]得到的值並不一定比a[i] *min[i-1]大,
因為min[i-1]可能為負,如果min[i-1]的絕對值大於max[i-1],那麼a[i] *min[i-1]負負相乘的值則更大。
因此有以下轉移方程 求三者最大 max[i] = maxinthree(a[i], a[i]*max[i-1],a[i]*min[i-1])
求三者最小 min[i] = mininthree(a[i], a[i]*max[i-1], a[i]*min[i-1])
//a b 最大值與c比較 三者誰大取哪乙個值
static int maxinthree(int a, int b, int c)
static int minthree(int a, int b, int c)
static void getbiggestmultiofsubarray(int input,int size)
}system.out.println(product);
system.out.println(ls);
}public static void main(string args) ;
getbiggestmultiofsubarray(input,6);
}
如果想要得到 字串序列:其實x>0 可以加入list;當x<0 時,當有偶數個負數也可以加入list。 最長公共子串行與字串的相似度問題
字串的相似性 如果將乙個串轉換成為另乙個串所需的運算元最少,那麼可以說這兩個串是相似的。另外一種權衡的方法是,尋換第三個串s3,如果s3都出現在s1和s2中,且出現的順序相同,但不要求在s1和s2中連續,那麼s3的長度越大,就說明相似度越高。後一種對相似度概念命名為最長公共子串行。1 最長公共子串行...
最長公共字串和最長公共子串行
給出兩個字串,找到最長公共子串,並返回其長度。建立乙個矩陣來儲存兩個字串出現相同字元的地方,比如 abccd 和 abcefc 就有 abccd a10000 b02000 c00300 e00040 f00000 c00100 這樣就有每次遇到相等的都加上下他的斜上方的位置的值,然後使用乙個max...
求最長公共子串行和最長公共子串
輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50。輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。輸入例子 abcde abgde 輸出例子 2題解 例如 str1 abcde str2 abgde matrix 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0...