`

查找首个重复字符串算法

阅读更多

/**
 * 例“abncdbmn”,首个重复字母为b
 */
package cn.edu.moon.alg;

import java.util.BitSet;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Administrator
 *
 */
public class FindSameChar {  
      
    public  char findSameChar(String str){    
        int length = str.length();    
        for(int i = 0;i<length;i++)    
            for(int j=i+1;j<length;j++)    
            {    
                if(str.charAt(i)==str.charAt(j)){    
                    return str.charAt(i);    
                }    
            }  
        return 0;  
    }    
        
    public  char findSameMap(String str){    
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();    
        for(int i=0;i<str.length();i++){    
            if(map.containsKey(str.charAt(i))){  
                return str.charAt(i);  
            }else    
            {    
                map.put(Character.valueOf(str.charAt(i)), Integer.valueOf(1));    
            }    
        }  
        return 0;  
    }  
      
    public  char findSameBitSet(String str) {  
        BitSet set = new BitSet(255);  
        for (int i = 0; i < str.length(); i++) {  
            if (set.get(str.charAt(i))) {  
                return str.charAt(i);  
            } else {  
                set.set(str.charAt(i), true);  
            }  
        }  
        return 0;  
    }  
      
    private static final Pattern p = Pattern.compile("(\\w).*\\1");    
      
    public  String findSameRegEx(String s) {    
        Matcher m = p.matcher(s);    
        if (m.find()) {    
            return m.group(1);    
        } else {    
            return null;    
        }    
    }   
      
    private static final long TIMES = 100*1000*1000;  
      
    public static void main(String[] args) {  
        char result = 0;  
        FindSameChar test = new FindSameChar();
        long t = System.currentTimeMillis();  
        for (long i = 0; i < TIMES; i++) {  
            result = test.findSameChar("abcdefghijklmnopqrstbab");  
        }  
        t = System.currentTimeMillis() - t;  
        System.out.println("findSameChar : Result " + result + " in " + t);  
          
        result = 0;  
        t = System.currentTimeMillis();  
        for (long i = 0; i < TIMES; i++) {  
            result = test.findSameMap("abcdefghijklmnopqrstbab");  
        }  
        t = System.currentTimeMillis() - t;  
        System.out.println("findSameMap : Result " + result + " in " + t);  
 
        result = 0;  
        t = System.currentTimeMillis();  
        for (long i = 0; i < TIMES; i++) {  
            result = test.findSameBitSet("abcdefghijklmnopqrstbab");  
        }  
        t = System.currentTimeMillis() - t;  
        System.out.println("findSameBitSet : Result " + result + " in " + t);  
          
        String strResult = null;  
        t = System.currentTimeMillis();  
        for (long i = 0; i < TIMES; i++) {  
            strResult = test.findSameRegEx("abcdefghijklmnopqrstbab");  
        }  
        t = System.currentTimeMillis() - t;  
        System.out.println("findSameRegEx : Result " + strResult + " in " + t);  
    }  
}   
/**
 * 运行结果,原以为findSameMap最快,哈哈,最终最简单的总是最快的
    findSameChar : Result a in 10547
    findSameMap : Result b in 246000
    findSameBitSet : Result b in 76328
    findSameRegEx : Result a in 127187
*/

0
0
分享到:
评论

相关推荐

    查找重复字符串代码

    在编程领域,查找重复字符串是一项常见的任务,尤其是在大数据分析、文本处理或文件比较等场景中。本主题将深入探讨如何利用后缀数组这一数据结构来有效地查找文本中的重复字符串。后缀数组是一种强大的工具,它能...

    字符串算法

    字符串算法是计算机科学中的一个重要领域,它涉及到对字符串(一串字符序列)进行操作和分析的各种算法。在处理文本、编程语言、数据压缩、搜索、排序等问题时,字符串算法起着至关重要的作用。这里我们将深入探讨...

    字符串查找KMP算法

    KMP算法的核心思想是利用已知的模式串(要查找的字符串)构建一个部分匹配表,这个表记录了模式串中每个字符之前出现的最长公共前后缀。通过这个表,当主串(待查找的字符串)与模式串比较时,如果出现不匹配的情况...

    常用字符串算法集合(c++)

    这个压缩包“常用字符串算法集合(c++)”包含了一些经过编译验证的示例代码,旨在帮助学习者掌握常见字符串算法的实现。以下是一些可能涵盖的知识点: 1. **字符串基本操作**:C++标准库中的`std::string`类提供了...

    基于字符串模式匹配算法的病毒感染检测问题_算法_数据结构_

    字符串模式匹配算法在此过程中扮演了核心角色,因为它可以高效地查找可能的病毒签名或恶意代码序列。本话题将深入探讨如何利用C语言实现基于字符串模式匹配算法的病毒感染检测。 首先,我们需要了解字符串模式匹配...

    查找字符串中出现重复次数最多的字符

    本主题关注的是如何查找一个字符串中出现重复次数最多的字符。这是一个典型的字符串处理问题,对于理解字符串操作和优化算法能力的提升非常有帮助。 首先,我们要明确问题的目标:给定一个字符串,找出其中出现频率...

    LZ78算法实现对任意字符串的压缩与解压

    它通过查找输入字符串中的最长匹配前缀来构建一个新的编码,从而实现数据的压缩。这种算法的主要思想是创建一个动态更新的字典,字典中的条目是输入字符串中的已编码子串。 在Java环境中实现LZ78算法,首先我们需要...

    kmp字符串查找算法

    KMP(Knuth-Morris-Pratt)字符串查找算法是一种在主串中高效地查找子串的算法,由Donald Knuth、Vaughan Pratt和James H. Morris三位学者于1970年代提出。该算法避免了在匹配过程中对已匹配部分的重复比较,从而...

    KMP字符串匹配算法

    KMP算法广泛应用于文本处理、编译器设计、数据压缩等领域,特别是在需要快速查找某个字符串是否存在于另一个字符串中的场合。 总结,KMP字符串匹配算法通过构建部分匹配表来优化比较过程,减少了不必要的回溯,提升...

    文件中字符串匹配算法C语言版

    本项目关注的是一个C语言实现的文件中字符串匹配算法,其核心目标是读取名为"input.txt"的文件,根据用户输入的查找字符串,找出并标识出所有匹配项的位置,然后将结果输出到"output.txt"文件中。 首先,我们需要...

    按照字符串顺序从小到大排序,删除重复字符

    标题中的任务是“按照字符串顺序从小到大排序,删除重复字符”,这通常是一个字符串处理的问题,涉及到了排序算法和字符数组的操作。在这个问题中,我们可以看到一个简单的C语言程序实现,它使用冒泡排序对字符串中...

    c# 在字符串里处理重复字符

    处理重复字符时,一个直观的方法是遍历字符串,使用字典(`System.Collections.Generic.Dictionary, int&gt;`)来记录每个字符出现的次数。以下是一种实现方式: ```csharp using System; using System.Collections....

    数据结构和算法:字符串

    在处理字符串算法时,空间复杂度是一个不能忽视的因素。例如,如果用递归的方法来解决问题,需要考虑递归调用栈的开销,尤其是在深度递归的情况下,可能会导致栈溢出。而非递归算法可能会需要额外的空间来存储中间...

    字符串匹配算法总结

    这里我们将深入探讨几种常见的字符串匹配算法,包括Brute Force算法、KMP算法、Horspool算法以及Boyer-Moore算法。 1. **Brute Force算法**:这是最直观的字符串匹配方法,也被称为简单匹配。它将模式串与匹配串...

    字符串匹配算法C代码实现

    字符串匹配是计算机科学中一个基础且重要的问题,广泛应用于文本处理、搜索引擎、数据挖掘等领域。在C语言中,实现字符串匹配算法通常涉及到对字符数组的操作和逻辑控制结构。本篇文章将详细探讨四种常见的字符串...

    字符串匹配算法之Horspool算法

    ### 字符串匹配算法之Horspool算法:深入解析与应用 #### 引言 在计算机科学领域,字符串匹配是一项核心任务,广泛应用于文本编辑、数据检索、模式识别等多个场景。传统的简单匹配算法如逐一比较法往往在面对大...

    C语言中压缩字符串的简单算法小结

    这种方法虽然复杂,但在特定场景下能够达到较高的压缩率,尤其是当字符串包含大量重复字符时。 在实际应用中,如搜索引擎的日志处理、大规模文件的关键词提取、高频率词汇的统计等,字符串压缩算法起着至关重要的...

    字符串处理算法

    在当今的计算机科学领域,字符串处理是一个极其重要的课题,尤其在算法竞赛如ACM(ACM国际大学生程序设计竞赛)中,高效的字符串处理算法是解决许多问题的关键。本文将介绍一些常见的字符串处理算法:Hash、KMP、...

Global site tag (gtag.js) - Google Analytics