zoukankan      html  css  js  c++  java
  • b_dd_一次交换使字符串字典序最小(思维)

    交换一次或不交换一个字符串的两个字母,得到一个字典序最小的字符串(n<1e5)

    思路:O(26×n)的做法,顺序遍历s,如果存在一个字符j在s[i]后面,且比s[i]要小的话,此时交换,得到的串的字典序最小

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        string s; cin>>s;
        int n=s.size();
        unordered_map<char, int> mp;
        for (int i=0; i<n; i++) mp[s[i]]=i;
        for (int i=0; i<n; i++) {
            for (char j='a'; j<s[i]; j++) {
                if (mp.find(j) != mp.end() && mp[j]>i) {
                    int idx=mp[j];
                    swap(s[idx], s[i]);
                    cout<<s;
                    return 0;
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    继承
    对象和封装
    类的无参、带参方法
    类和对象
    数组
    循环结构
    选择结构
    变量、数据类型和运算符
    快捷键
    MyEclipse与JDK的配置
  • 原文地址:https://www.cnblogs.com/wdt1/p/14589191.html
Copyright © 2011-2022 走看看