华为机试真题--字符串变换最小字符串
题目描述:
给定一个字符串s, 最多只能进行一次变换, 返回变换后能得到的最小字符串
(按照字典序进行比较)。
变换规则: 交换字符串中任意两个不同位置的字符。
输入描述:
一串小写字母组成的字符串s。
输出描述:
按照要求进行变换得到的最小字符串。
特别注意:
s是都是小写字符组成,1<=s.length<=1000
例如:输入 bcdefa,输出就是acdefb;输入abcdef,输出abcdef;
示例1:
输入
abcdef
输出
abcdef
说明:abcdef已经是最小字符串,不需要交换
示例2:
输入
bcdefa
输出
acdefb
说明:a和b进行位置交换,可以得到最小字符串
C++源码:
#include <iostream>
#include <algorithm>
using namespace std;char findAndSwap(string& str) {if (str.empty()) {cout << "字符串为空!" << endl;return '\0'; // 如果字符串为空,返回空字符}// 找到字典序最小的字符的位置auto minIt = min_element(str.begin(), str.end());// 如果最小的字符已经在第一个位置,不需要交换if (minIt == str.begin()) {return *minIt; // 直接返回这个字符即可}// 执行交换char temp = *str.begin(); // 保存第一个字符*str.begin() = *minIt; // 将找到的最小字符放到第一个位置*minIt = temp; // 将原来的第一个字符放到找到的最小字符的位置return temp; // 返回被交换走的原第一个字符
}int main() {string str;cout << "请输入一个字符串: ";cin >> str;char originalFirstChar = findAndSwap(str);cout << "处理后的字符串: " << str << endl;cout << "被交换到原第一个位置的字符是: " << originalFirstChar << endl;system("pause"); // 暂停程序,以便查看输出return 0;
}