日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【C/C++】小红的字符串 / 中兴捧月

發布時間:2023/12/15 综合教程 20 生活家
生活随笔 收集整理的這篇文章主要介紹了 【C/C++】小红的字符串 / 中兴捧月 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

考試的時候想復雜了,其實直接一邊寫放進set里去重就可以了
很有意思
自己的理解就是cpp的map+set或者就是set可以完成大多數java的hashset操作

鏈接:https://ac.nowcoder.com/acm/problem/221493
來源:牛客網

題目描述
小紅有一個字符串,她每次操作可以改變一個字符的值。
對于'a'、'b'、'c'、……、'y'等小寫字母,小紅每次操作可以把該字母變成比它大一位的字母,即變成'b'、'c'、'd'、……、'z'。
對于'A'、'B'、'C'、……、'Y'等大寫字母,小紅每次操作可以把該字母變成比它大一位的字母,即變成'B'、'C'、'D'、……、'Z'。
對于'0'、'1'、'2'、……、'8'等數字,小紅每次操作可以把該數字變成比它大一位的數字,即變成'1'、'2'、'3'、……、'9'。
對于一些特殊的字符:

'z' 會變成 'A'。
'Z' 會變成 '0'。
'9' 會變成 'a'。
現在小紅想使這個字符串不存在任意相同的兩個字符,你能輸出這個最小的操作次數嗎?

輸入描述:
第一行一個正整數nn,代表字符串的長度。
接下來一個長度為nn的,僅包含小寫字母、大寫字母或數字的字符串。

輸出描述:
如果小紅無法達成目的,則輸出 -1 ,否則輸出最小的操作次數。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    string str;
    scanf("%d", &n);
    cin >> str;
    int cnt = 0;

    if (n > 62)
    {
        cout << -1 << endl;
        return 0;
    }

    set<char> st;
    for (int i = 0; i < n; i++)
    {
        char ch = str[i];
        while (st.count(ch) == 1)
        {
            cnt++;
            if ( ch == 'z' )
            {
                ch = 'A'; continue;
            }
            else if ( ch == 'Z')
            {
                ch = '0'; continue;
            }
            else if ( ch == '9' )
            {
                ch = 'a'; continue;
            }
            ch++;
        }
        st.insert(ch);
    }

    // auto it = st.begin();
    // while(it != st.end())
    // {
    //     cout << *it << endl;
    //     it++;
    // }
    cout << cnt << endl;

    system("pause");
}

總結

以上是生活随笔為你收集整理的【C/C++】小红的字符串 / 中兴捧月的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。