資料結構與演算法——字典序最小問題(用string類實現)
思路:將源字串str反轉得到 rstr;然後比較兩個字串的大小,比如,如果str小,則將str的第一個字元加入min_str的後面,並將str的第一個字元刪除;直到min_str的長度等於str;
主要是學習string類的成員函式:begin(), end(), rbegin(), rend(), front(), erase(), push_back();
linux程式碼以及執行結果:
/*************************************************************************
> File Name: best_cow_line.cpp
> Author:
> Mail:
> Created Time: 2015年12月13日 星期日 16時51分44秒
************************************************************************/
#include<iostream>
#include <string>
using namespace std;
/*輸入資料*/
int input_data(int * len, string & str)
{
cout << "string length: ";
cin >> *len;
cout << "string: ";
cin >> str;
return 0;
}
/*該函式僅僅是用於驗證輸入的資料是否正確*/
void output_data(int *len, string & str)
{
cout << "string length is " << *len << endl;
cout << "string is " << str << endl;
}
/*得到最小的字串*/
void solve(int *len, string & str, string & min_str)
{
string rstr(str.rbegin(), str.rend());
// cout << "rstr is " << rstr << endl;
int num = *len;
while(num > 0){
if(str < rstr){ //如果求最大字串,應該為str > rstr
//min_str.push_back(str.front());
min_str.push_back(*str.begin());
str.erase(str.begin());
}
else{
min_str.push_back(*rstr.begin());
rstr.erase(rstr.begin());
}
num--;
}
}
int main()
{
int str_len = 0;
string str;
string min_str;
int ret = 0;
ret = input_data(&str_len, str);
if(ret < 0){
cout << "input the data error" << endl;
}
solve(&str_len, str, min_str);
cout << "min str is: " << min_str << endl;
// cout << "output the data: " << endl;
// output_data(&str_len, str);
return 0;
}
windows系統下:
/*************************************************************************
> File Name: best_cow_line.cpp
> Author:
> Mail:
> Created Time: 2015年12月13日 星期日 16時51分44秒
************************************************************************/
#include<iostream>
#include <string>
using namespace std;
/*輸入資料*/
int input_data(int * len, string & str)
{
cout << "string length: ";
cin >> *len;
cout << "string: ";
cin >> str;
return 0;
}
/*該函式僅僅是用於驗證輸入的資料是否正確*/
void output_data(int *len, string & str)
{
cout << "string length is " << *len << endl;
cout << "string is " << str << endl;
}
/*得到最小的字串*/
void solve(int *len, string & str, string & min_str)
{
string rstr(str.rbegin(), str.rend());
// cout << "rstr is " << rstr << endl;
int num = *len;
while (num > 0){
if (str < rstr){ //如果求最大字串,應該為str > rstr
min_str.push_back(str.front());//在linux下面沒有該c++11加入的函式
//min_str.push_back(*str.begin());
str.erase(str.begin());
}
else{
min_str.push_back(rstr.front());
//min_str.push_back(*rstr.begin());
rstr.erase(rstr.begin());
}
num--;
}
}
int main()
{
int str_len = 0;
string str;
string min_str;
int ret = 0;
ret = input_data(&str_len, str);
if (ret < 0){
cout << "input the data error" << endl;
}
solve(&str_len, str, min_str);
cout << "min str is: " << min_str << endl;
// cout << "output the data: " << endl;
// output_data(&str_len, str);
system("pause");
return 0;
}
相關文章
- 演算法與資料結構——序演算法資料結構
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 資料結構與演算法——AVL樹類的C++實現資料結構演算法C++
- 資料結構與演算法 | 棧的實現及應用資料結構演算法
- 資料結構與演算法——不相交集類的C++實現資料結構演算法C++
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- 【資料結構與演算法】揹包問題總結梳理資料結構演算法
- 資料結構與演算法--簡單棧實現及其應用資料結構演算法
- 資料結構與演算法——常用高階資料結構及其Java實現資料結構演算法Java
- 【資料結構與演算法】字典樹(附完整原始碼)資料結構演算法原始碼
- Redis資料結構—連結串列與字典Redis資料結構
- Redis資料結構—連結串列與字典的結構Redis資料結構
- 演算法與資料結構-棧(Stack)-Java實現演算法資料結構Java
- 【資料結構】實現順序表(c++)資料結構C++
- 【演算法資料結構Java實現】Java實現動態規劃(揹包問題)演算法資料結構Java動態規劃
- JavaScript資料結構——字典和雜湊表的實現JavaScript資料結構
- JavaScript資料結構——集合的實現與應用JavaScript資料結構
- python演算法與資料結構-順序表(37)Python演算法資料結構
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構與演算法之硬幣組合問題資料結構演算法
- 資料結構與演算法——0-1揹包問題資料結構演算法
- 資料結構與演算法——迭代開啟url問題(連結串列)資料結構演算法
- 資料結構與演算法常見問題(面試題)不定時更新資料結構演算法面試題
- 【資料結構】實現順序表(c語言)資料結構C語言
- 【資料結構】順序棧的實現(c++)資料結構C++
- 資料結構-字典樹資料結構
- 資料結構與演算法——二叉查詢樹類的C++實現資料結構演算法C++
- 『資料結構與演算法』棧:詳解與程式碼實現資料結構演算法
- 04 Javascript資料結構與演算法 之 字典和雜湊表JavaScript資料結構演算法
- javaScript的資料結構與演算法(四)——字典和雜湊表JavaScript資料結構演算法
- 資料結構與演算法入門題資料結構演算法
- 資料結構與演算法之最好學的最小生成樹資料結構演算法
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 演算法與資料結構之帶權圖與圖最小生成樹演算法資料結構
- 資料結構與演算法Python版 熟悉雜湊表,瞭解Python字典底層實現資料結構演算法Python
- 資料結構與演算法系列(一)陣列實現資料結構演算法陣列
- 資料結構與演算法——B樹的C++實現資料結構演算法C++
- 資料結構與演算法——表示式樹類的C++實現(二叉樹)資料結構演算法C++二叉樹