2024年华为OD机试真题-字符串变换最小字符串-(C++)-OD统一考试(C卷)

题目描述:

给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。变换规则:交换字符串中任意两个不同位置的字符。

输入描述:一串小写字母组成的字符串s

输出描述:按照要求进行变换得到的最小字符串

补充说明:s是都是小写字符组成
                  1<=s.length<=1000

示例 

示例1

输入:abcdef

输出:abcdef

说明:abcdef已经是最小字符串,不需要交换

示例2

输入:bcdefa

输出:acdefb

说明:a和b进行位置交换,可以等到最小字符串

#include 
#include 
 
using namespace std;
 
 
int main()
{
	int i = 0;
	string str;
	cin >> str;
 
	int indexmin = -1;
 
	int min = INT16_MAX;
	
	while (str[i] <= str[i + 1] && i < str.size() - 1) {
		++i;
	}
 
	int j = i + 1;
	if (j >= str.size()) {
		cout << str;
		return 0;
	}
 
 
	for (i = j; i < str.size(); ++i)
	{
		if (str[i] <= min)
		{
			indexmin = i;
			min = str[i];
		}
	}
 
	for (i = 0; i < str.size(); ++i)
	{
		if (str[indexmin] < str[i]) {
			swap(str[indexmin], str[i]);
			break;
		}
	}
	cout << str;
	
}

 

你可能感兴趣的:(华为od,c++,开发语言,华为,算法)