ZBLOG

#include #include #include using namespace std; int main() { string str; cin>>str; string str1 = str; //排序 std::sort(str1.begin(), str1.end()); cout

您提供的代码实现了一个功能:从输入字符串中找出第一个不重复的字符。下面是对这段代码的逐行解释以及一些改进建议:

代码解析

  1. 头文件和命名空间:

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    using namespace std;
    
    • 引入必要的头文件,包括用于排序和处理迭代器的 <algorithm>,用于输入输出的 <iostream> 和用于操作迭代器的 <iterator>
    • 使用 std 命名空间以便简化代码。
  2. 主函数:

    int main() {
       string str;
       cin >> str; // 读取用户输入的字符串
       string str1 = str; // 复制原始字符串
    
    
       // 排序
       std::sort(str1.begin(), str1.end());
       cout << str1 << endl; // 输出排序后的字符串
    
    
       auto itr = std::unique(str1.begin(), str1.end()); 
       int pos = std::distance(str1.begin(), itr); // 计算唯一字符的位置
       str1 = str1.substr(pos - 1); // 从最后一个唯一字符开始截取子串
    
    
       cout << str1 << endl; // 输出截取后的字符串
    
    
       for (int i = 0; i < str.length(); i++) {
           if (str1.find(str[i]) != string::npos) {
               continue; // 如果在唯一字符中找到,继续循环
           } else {
               cout << str[i]; // 找到第一个不重复字符并输出
               return 0;
           }
       }
    
    
       cout << -1; // 如果没有找到,则输出-1
       return 0;
    }
    

程序逻辑分析

  • 输入一个字符串并对其进行排序。
  • 利用 std::unique 函数去除相邻重复字符,并返回新的结束位置,通过 std::distance 获取有效长度。
  • 使用 substr 获取最后一部分(可能存在问题,这里将导致只保留最后一位)。
  • 遍历原始字符串,查找不在唯一字符中的第一个字符并输出。

改进建议

您的代码可以更高效地实现目标。以下是优化后的版本,可以直接找到并打印第一个不重复的字符,而无需额外排序或处理:

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    string str;
    cin >> str;

    unordered_map<char, int> charCount;

    // 第一步:统计每个字符出现次数
    for (char ch : str) {
        charCount[ch]++;
    }

    // 第二步:寻找第一个不重复的字符
    for (char ch : str) {
        if (charCount[ch] == 1) { 
            cout << ch; 
            return 0; 
        }
    }

    cout << -1; // 若没有不重复的字符则输出 -1
    return 0;
}

优化说明

  • 使用了 unordered_map 来存储每个字符出现的次数,这样可以在 O(n) 时间复杂度内完成统计。
  • 然后再遍历一次原始字符串来找到第一个出现次数为一的不重复字符。这种方法避免了多余的排序和处理步骤,提高了效率。

这种实现方式更加清晰且性能更优,更适合寻找第一次出现的不重复字符。如果有其他需求或进一步的问题,请随时告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21858

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?