1. 程式人生 > >華為oj 公共字串計算

華為oj 公共字串計算

此題是經典的動態規劃的題:設c[i][j] 表示第一個字串從開始到 i 的位置,和第二個字串從開始到 j 的位置的最長公共字串的長度,那麼我們可以根據題目得知一下條件

1.如果pFirstStr[i+1]==pSecondStr[j+1],那麼c[i+1][j+1]=c[i][j]+1;

2.如果pFirstStr[i+1] != pSecondStr[j+1],那麼c[i+1][j+1]= 0;

知道了了這兩點程式應該很好寫出來!
//動態規劃,最長公共字串
//2015/12/25
#include <iostream>
#include <string>
using namespace std;
int main()
{
	int c[100][100], len1, len2,max,x,y;
	string str1, str2;
	
	//獲取資料
	cin >> str1 >> str2;

	//初始化
	memset(c, 0, sizeof(int)* 10000);
	len1 = str1.size();
	len2 = str2.size();
	max = 0;

	//動態規劃為c[][]填值
	for (int i = 0; i < len1; i++)
	{
		for (int j = 0; j < len2; j++)
		{
			//將大寫字母轉換成小寫,因為不區分大小寫
			if (str1[i] >= 'A'&&str1[i] <= 'Z')
			{
				str1[i] = str1[i] - 'A' + 'a';
			}
			if (str2[j] >= 'A'&&str2[j] <= 'Z')
			{
				str2[j] = str2[j] - 'A' + 'a';
			}

			if (str1[i] == str2[j])
			{
				c[i + 1][j + 1] = c[i][j] + 1;
			}

			if (c[i + 1][j + 1]>max)
			{
				max = c[i + 1][j+1];
			}
		}
	}
   
	cout << max << endl;

	return 0;
}
結論:最長公共子序列要比這個難一點不過也是經典的動態規劃題目!

相關推薦

oj 公共字串計算

此題是經典的動態規劃的題:設c[i][j] 表示第一個字串從開始到 i 的位置,和第二個字串從開始到 j 的位置的最長公共字串的長度,那麼我們可以根據題目得知一下條件 1.如果pFirstStr[i+1]==pSecondStr[j+1],那麼c[i+1][j+1]=c[

OJ——公共字串計算

公共字串計算 題目描述 題目標題: 計算兩個字串的最大公共字串的長度,字元不區分大小寫 詳細描述: 介面說明 原型: int getCommonStrLength(char * pFirstStr, 

oj 公共子串計算

水題,原來以為用dp陣列  結果wrong了兩次 我想還是自己小題大做了···呵呵·· 獻給初學者作為參考 #include <stdio.h> #include <string.h> #define MAX 200 int getComm

OJ字串加解密

題目描述 1、對輸入的字串進行加解密,並輸出。 2加密方法為: 當內容是英文字母時則用該英文字母的後一個字母替換,同時字母變換大小寫,如字母a時則替換為B;字母Z時則替換為a; 當內容是數字時則把該數字加1,如0替換1,1替換2,9替換0; 其他字元不做變化。 3

OJ字串加密

有一種技巧可以對資料進行加密,它使用一個單詞作為它的密匙。下面是它的工作原理:首先,選擇一個單詞作為密匙,如TRAILBLAZERS。如果單詞中包含有重複的字母,只保留第1個,其餘幾個丟棄。現在,修改過的那個單詞死於字母表的下面,如下所示:A B C D E F G H I J K L M N O P Q 

OJ字串排序

採用氣泡排序(穩定排序): 法1: 遇到非字母字元時,處理要小心。 #include<iostream> #include<string> using namespace std; int main() { string s,str;

OJ——矩陣乘法計算量估算

矩陣乘法計算量估算 題目描述 矩陣乘法的運算量與矩陣乘法的順序強相關。例如:     A是一個50×10的矩陣,B是10×20的矩陣,C是20×5的矩陣 計算A*B*C有兩種順序:((AB)C)或者(A(BC)),前者需要計算15000次乘法,後者只需要3500次。 編寫程

[oj]計算公共字串

#include <iostream> #include <string> using namespace std; int main(){ int getCommonStrLength(string s1,string s2);

OJ公共字串計算

描述: 計算兩個字串的最大公共字串的長度,字元不區分大小寫。 知識點:  字串,查詢 題目來源:  內部整理  練習階段:  初級  執行時間限制: 10Sec 記憶體限制: 128MByte 輸入:  輸入兩個字串 輸出:  輸出一個整數 將這個整數以字串的形式逆

機試075】公共字串計算

題目描述: 計算兩個字串的最大公共字串的長度,字元不區分大小寫 Java實現: import java.util.Scanner; public class Main { public static void main(String[] args) { Sc

oj計算字串最後一個單詞的長度,單詞用空格隔開

/* 描述 計算字串最後一個單詞的長度,單詞以空格隔開。 知識點 字串,迴圈 執行時間限制 0M 記憶體限制 0 輸入 一行字串,長度小於128。 輸出 整數N,最後一個單詞的長度。

字串反轉——來自OJ平臺測試基礎篇

 /*  * 字串反轉  * 與字元逆序一樣,是同一個程式  * 描述:  寫出一個程式,接受一個字串,然後輸出該字串反轉後的字串。例如:  * 知識點:  陣列,指標   * 題目來源:  內部整理   * 練習階段:  初級   * 執行時間限制: 10Se

oj 明明的隨機數&&計算字元個數

在此提供三種解法,其實三種解法殊途同歸,不就是排個序,去個重就好! 1.利用map特點,插入map之後,會自動根據關鍵字排序,而且不會出現相同的關鍵字,正好滿足特性 #include<iostream> #include<map> using na

oj 字串萬用字元

本題,其實和分蘋果的題有那麼一丟丟的類似,在此提供兩種能通過的解法(主要就是對於‘*’的處理) 1.這種解法其實是錯誤的,但是也要說說他的思路,對於 ‘*’ 他直接找 ‘*’ 下一個字元是否出現在需要匹配的串中,並且找到那個位置,認為此位置到之前就是‘*’所匹配的內容。

[OJ--C++]088-按位元組擷取字串

題目描述:編寫一個擷取字串的函式,輸入為一個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如"我ABC"4,應該截為"我AB",輸入"我ABC漢DEF"6,應該輸出為"我ABC"

OJ——字串萬用字元

題目描述   問題描述:在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋、資料庫、正則表示式等領域。現要求各位實現字串萬用字元的演算法。 要求: 實現如下2個萬用字元: *:匹配0個或以上的字元(字元由英文字母和數字0-9組成,不區分大小寫

OJ:計算字元個數

因為區分大小寫,所以要用toUpperCase()和toLowerCase()兩個函式同時與charAt得到的字元比較。 import java.util.Scanner; public class countCharNumber { public static vo

oj 字串個數統計&&數字顛倒&&字串翻轉&&字元逆序&&求int型資料在記憶體中儲存時1的個數

同樣只上程式,都是簡單題 #include<iostream> using namespace std; int main() { int in[128], count = 0; char n,temp[100]; memset(in, 0, sizeo

oj中級 計算日期到天數轉換

#include<iostream> #include<algorithm> #include<string> #include<vector> #inc

OJ ---計算日期到天數的轉換(給定一個日期,輸出這一年的第幾天)

問題描述: 根據輸入的日期,計算是這一年的第幾天。。 詳細描述: 輸入某年某月某日,判斷這一天是這一年的第幾天?。 思路分析:1.判斷年分是平年還是閏年((year%4==0&&