最大子串行
最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 ,它的和是8,達到最大;而 的最大子串行是,它的和是6。你已經看出來了,找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最後找到和最大的子串行。
#includeusing namespace std;
int maxsubseq(const int *arr,int len,int *start,int *end)
if(sum<=0)
}return max;
}int main();
int start,end;
int max=maxsubseq(arr,6,&start,&end);
cout<<"the maxsubseq is from position "<
最長公共子串(lcs)
找 兩個字串的最長公共子串,這個子串要求在原字串中是連續的。其實這又是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結 果。這個二維矩陣怎麼構造呢?直接舉個例子吧:"bab"和"caba"(當然我們現在一眼就可以看出來最長公共子串是"ba"或"ab")
b a b
c 0 0 0
a 0 1 0
b 1 0 1
a 0 1 0
我們看矩陣的斜對角線最長的那個就能找出最長公共子串。
不過在二維矩陣上找最長的由1組成的斜對角線也是件麻煩費時的事,下面改進:當要在矩陣是填1時讓它等於其左上角元素加1。
b a b
c 0 0 0
a 0 1 0
b 1 0 2
a 0 2 0
這樣矩陣中的最大元素就是 最長公共子串的長度。
在構造這個二維矩陣的過程中由於得出矩陣的某一行後其上一行就沒用了,所以實際上在程式中可以用一維陣列來代替這個矩陣。
#include#include#includeusing namespace std;
//str1為橫向,str2這縱向
const string lcs(const string& str1,const string& str2)
}
}//
if(c>*max)
return res;
}//呼叫此函式時請注意把較長的字串賦給str1,這主要是為了在回溯最長子序列時節省時間。如果沒有把較長的字串賦給str1不影響程式的正確執行。
string lcs(const string &str1,const string &str2)
else if(arr[i][j].second==left)
else if(arr[i][j].second==up)
}string res="";
while(!st.empty())
return res;
}int main()
字串的倒序輸出
常規方法
#include #include void stringreverse(char *str)
char *pbegin = str;
char *pend = str + strlen(str) - 1;
while(pbegin < pend) }
int main()
鍊錶形式
void printlistreversely(listnode* plisthead)
// print this node
printf("%d", plisthead->m_nkey);
} }
關於 字串 的筆試,面試題
題目摘錄於各大it公式筆試面試題及網路,本人為程式設計菜鳥,歡迎各位批評指正。1 字串與整數 或小數 的轉換 字串轉換為整數 小數 整數 小數 轉換為字串 1 字串轉換為整數 小數 應考慮到字串前後的空格以及正負號。includeusing namespace std int main double...
C 面試題 之字串
基本上求職者進行筆試時沒有不考字串的。字串也是一種相對簡單的資料結構,容易引起面試官反 問。事實上,字串也是考驗 程式設計師程式設計規範和程式設計習慣的重要考點。不要忽視這些細節,因為這些細節會體現你在作業系統 軟體工程 邊界記憶體處理等方面的知識掌握能力,也會成為企業是否錄用你的參考因素。答案 i...
面試題目之刪除字串
問題描述 在給定字串中查詢所有特定子串並刪除,如果沒有找到相應子串,則不作任何操作。要求實現函式 int delete sub str const char str,const char sub str,char result str 輸入 str 輸入的被操作字串 sub str 需要查詢並刪除的...