sicily1198
来源:互联网 发布:算法类问题求解的步骤 编辑:程序博客网 时间:2024/04/20 10:10
1198. Substring
Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
Description
Dr lee cuts a string S into N pieces,s[1],…,s[N].
Now, Dr lee gives you these N sub-strings: s[1],…s[N]. There might be several possibilities that the string S could be. For example, if Dr. lee gives you three sub-strings {“a”,“ab”,”ac”}, the string S could be “aabac”,”aacab”,”abaac”,…
Your task is to output the lexicographically smallest S.
Input
The first line of the input is a positive integer T. T is the number of the test cases followed.The first line of each test case is a positive integer N (1 <=N<= 8 ) which represents the number of sub-strings. After that, N lines followed. The i-th line is the i-th sub-string s[i]. Assume that the length of each sub-string is positive and less than 100.
Output
The output of each test is the lexicographically smallest S. No redundant spaces are needed.
Sample Input
13aabac
Sample Output
aabac
————————————————————————————————————————————————
问题简述:
分别输入N(N<8)个子字符串str[],随意排列组合,输出所有组合串中字典序最小的字符串。
涉及算法:
递归,排序
思路:
-------先想到的方法是对所有子字符串string str[i]按照字典序排序,然后按顺序组合就好了
结果:wrong answer
原因:没有考虑到这种情况:
12bba
这种输入,按照题目要求的标准输出应该是:bab,但是如果按照我自己的方法就会输出bba(b的字典序<ba,但是bab的字典序<bba)改进思路:
------------先得到子字符串的所有排列组合结果,然后将结果按字典序排序,输出字典序最小的字符串。
得到所有排列组合结果的方法是递归算法,同时在递归时就比较字典序的大小。
代码:
</pre><pre name="code" class="cpp">#include <iostream>#include <string>using namespace std;void Permutation_Solution(string sub[], string *hold, int begin, int end){ if(begin == end - 1) //只剩一个元素 { string str; for(int i = 0; i < end; i++) str += sub[i]; if(str < *hold) *hold = str; } else { for(int k = begin; k < end; k++) { swap(sub[k], sub[begin]); //交换两个字符串的位置 Permutation_Solution(sub, hold, begin + 1, end);//递归 swap(sub[k],sub[begin]); //恢复 } }}int main() { int n = 0; cin >> n; while(n >0) { int num; cin >> num; string sub[num]; //子串 string hold; for(int i = 0; i < num; i++){ cin >> sub[i]; hold += sub[i]; } Permutation_Solution(sub, &hold, 0, num); cout << hold << '\n'; n--; } return 0;}
- sicily1198
- sicily1198. Substring
- spring3源码编译学习
- POJ 1410 Intersection
- Sort Colors
- JavaScript函数式编程
- 为什么 我 的myeclipse调试的时候,有时鼠标放在变量上就显示变量值,有时就没有,提示不可以显示
- sicily1198
- 给基础学科唱些赞歌
- A*寻路
- UVA 11796 Dog Distance(点与向量)
- 为什么JavaScript声明变量的时候鼓励加var关键字
- 编程题目《[usaco2008jan_silver]贝茜的晨练计划》题解
- 20140913
- leetcode - Max Points on a Line
- 学习Xpath