1. 程式人生 > >劍指Offer-第一個只出現一次的字符位置

劍指Offer-第一個只出現一次的字符位置

次數 第一個只出現一次的 nts 劍指offer 出現次數 urn for code 出現的次數

題目描述

在一個字符串(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; } }

劍指Offer-第一個只出現一次的字符位置