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

    题目描述

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

    思路

    思路一:

    使用整型数组对出现次数进行统计。

    思路二:

    使用BitSet对出现次数进行统计。 0,1,更多

    代码实现

    package String;
    
    import java.util.BitSet;
    
    /**
     * 第一个只出现一次的字符位置
     * 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
     */
    public class Solution51 {
        public static void main(String[] args) {
            Solution51 solution51 = new Solution51();
            String str = "eabbaecdffd";
            System.out.println(solution51.FirstNotRepeatingChar_2(str));
        }
    
        /**
         * 使用BitSet对出现次数进行统计    0,1,更多
         * 对应ASCII码表的256个字符
         *
         * @param str
         * @return
         */
        public int FirstNotRepeatingChar_2(String str) {
            BitSet bs1 = new BitSet(256);
            BitSet bs2 = new BitSet(256);
            for (char c : str.toCharArray()) {
                if (!bs1.get(c) && !bs2.get(c)) {
                    bs1.set(c);     // 0 0
                } else if (bs1.get(c) && !bs2.get(c)) {
                    bs2.set(c); // 0 1
                }
            }
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                if (bs1.get(c) && !bs2.get(c))
                    return i;
            }
            return -1;
        }
    
        /**
         * 使用整型数组对出现次数进行统计
         * 对应ASCII码表的256个字符
         * 数组的index就是字符, 值为字符出现的次数
         *
         * @param str
         * @return
         */
        public int FirstNotRepeatingChar(String str) {
            int[] cnts = new int[256];
            for (int i = 0; i < str.length(); i++) cnts[str.charAt(i)]++;
            for (int i = 0; i < str.length(); i++) if (cnts[str.charAt(i)] == 1) return i;
            return -1;
        }
    }
    
    
  • 相关阅读:
    int 类型 占多少字节是由什么决定的
    layer.js漂亮的弹出框
    jquery分页点击后页面置顶
    动态请求页面生成静态页
    弹出ifame页面(jquery.reveal.js)
    Request.QueryString["id"] 、Request.Params["id"] 的强大
    为什么现在改用int.TryParse了
    时间格式(例如:2015-11-09)
    返回前一页
    sql获得某个时间段的数据
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8878665.html
Copyright © 2011-2022 走看看