C++ 经典算法集锦 三

本文介绍 C++ 经典算法集锦 三

C++ 经典算法集锦 三

本文由在当地较为英俊的男子金天大神原创,版权所有,欢迎转载,本文首发地址 https://jinfagang.github.io 。但请保留这段版权信息,多谢合作,有任何疑问欢迎通过微信联系我交流:jintianiloveu

Algorithm 6. 字符串算法

既然字符串经常出现,那我就记录一些字符串算法。
首先是,用hash表查找,比如给一个字符串fierjggooi要找出第一个重复的字符,这里应该是i,因为i出现了两次,而且是首次出现。要怎么写呢?

#include <iostream>
#include <vector>
using namespace std;
// define a hash table struct
typedef struct Hash{
    char c;
    int times;
};
int find_first_repeat(string s) {
    // find the first repeat char in s

    // we have all 52 chars
    int n = 52;
    Hash *HashTable;
    HashTable = new Hash[n];

    for (int i = 0; i < s.size(); ++i) {

        int pos = islower(s[i])? (s[i] - 'a'): (s[i] - 'A' + n/2);
        if (!HashTable[pos].c) {
            HashTable[pos].c = s[i];
            HashTable[pos].times = 1;
        } else {
            HashTable[pos].times++;
        }
    }

    for (int j = 0; j < s.size(); ++j) {
        int pos = islower(s[j])? (s[j] - 'a'): (s[j] - 'A' + n/2);
        if (HashTable[pos].times > 1) {
            cout << "hash c: " << HashTable[pos].c << endl;
            cout << "s: " << s[j] << endl;
            cout << j << endl;
            return j;
        }
    }
    return -1;
}

int main()
{
    string a = "goigygyvtuty";
    // should get 'u'
    int p = find_first_repeat(a);
    if (p >= 0) {
        cout << "first repeat char is: " << a[p] << endl;
    } else {
        cout << "no repeat char.\n";
    }


    return 0;
}

其实也非常简单,只需要写一个hash表,记录每个字符对应出现的次数即可。说白了就是一个字典,只不过这里更加底层一些。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,314评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,319评论 18 399
  • 总要趁着还有今日,天天彼此相劝,免得你们中间有人被罪迷惑,心里就刚硬了。我们若将起初确实的信心坚持到底,就在基督里...
    远山note阅读 5,152评论 0 0
  • 从早还是晚 面前的光 千里独行 这一方天地 无时无刻都看或听 从不等待 也不犹豫 处处都不留情 但这又如何呢 我还...
    新柳长青阅读 1,301评论 0 0
  • 1.下载智慧树家长版
    陆文倩阅读 5,108评论 0 0

友情链接更多精彩内容