zoukankan      html  css  js  c++  java
  • 剑指offer_第一个只出现一次的字符

    题目描述

    在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置。

    时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在HashMap中;再遍历一次字符串,第一次检测到其在HashMap中记录的次数为1时,输出当前位置。

    代码:

    import java.util.*;
    public class Solution {
        public int FirstNotRepeatingChar(String str) {
            if(str==null||str.length()==0){
                return -1;
            }
            char[] chars = str.toCharArray();
            HashMap<Character,Integer> map = new HashMap<Character,Integer>();
            for(int i=0;i<str.length();i++){
                if(map.get(chars[i])!=null){
                    map.put(chars[i],map.get(chars[i])+1);
                }else{
                    map.put(chars[i],1);
                }
            }
            for(int i=0;i<str.length();i++){
                if(map.get(chars[i])==1){
                    return i;
                }
            }
            return -1;
        }
    }

    这种题目的变形:

    剑指offer_数组中出现次数超过一半的数字

    都是利用HashMap记录出现的字符及其次数。

    再次变形:

    实现一函数,给定两个字符串str1和str2,将字符串str2中在str1出现的字符删除掉。例如,str1=“We are strudent”,str2=“eas”,最终返回“W r tudnt”。

    做法:遍历str2并将其字符放入哈希数组中,再遍历str1,去掉哈希数组中存在的字符即可。与上题思路一致。时间复杂度为O(n+m),n和m分别为str1和str2的长度。空间为O(1)。

    再变再变:

    实现一函数,将字符串中出现重复字符全部去掉。例如,str=“google”,那么返回为“gole”。

    做法:类似,可用一个布尔数组去记录。第一次出现标志位true,当第二次访问该字符时,当前标志位为true时,删除当前字符。时间复杂度为O(n),n为str的长度。空间为O(1)。

    思路都是一样一样的

  • 相关阅读:
    JQuery是继prototype之后又一个优秀的Javascript库
    IAsyncResult接口
    Asynchronous Programming Patterns
    操作数据库的时候,使用自带的DbProviderFactory类 (涉及抽象工厂和工厂方法)
    8.2.4对象之间的关系
    git squash 和 git rebase
    8.2.3多态性 第8章 面向对象编程简介
    github的使用教程
    第7章 调试和错误处理 7.1.1 VS中的调试
    markdown的语法说明
  • 原文地址:https://www.cnblogs.com/lingongheng/p/6444222.html
Copyright © 2011-2022 走看看