劍指Offer-第一個只出現一次的字符位置
阿新 • • 發佈:2018-04-19
次數 第一個只出現一次的 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-第一個只出現一次的字符位置