剑指Offer第三十四题:第一个只出现一次的字符

tech2022-10-02  101

剑指Offer第三十四题:第一个只出现一次的字符

思路1:

如果一个字符在字符串中第一次出现的位置与最后一次出现的位置相同,那么这个字符就只出现一次求String中某个字符第一次出现的位置indexOf(char c)求String中某个字符最后一次出现的位置lastIndexOf(char c) public class Solution { public int FirstNotRepeatingChar(String str) { if(str == null || str.length() == 0){ return -1; } for(int i = 0; i<str.length(); i++){ if(str.indexOf(str.charAt(i)) == str.lastIndexOf(str.charAt(i))){ return i; } } return -1; }

思路2: 用一个可以存储所有字符的数组来统计每一个字符出现的次数 再把统计数组按照字符串中字符的顺序遍历一遍,如果出现统计次数为1的直接输出即可。

统计数组的长度经常取128,ascii码的长度

public class Solution { public int FirstNotRepeatingChar(String str) { if(str == null || str.length() == 0){ return -1; } int[] flags = new int[128]; for(int i = 0; i<str.length(); i++){ flags[str.charAt(i)]++; } for(int i = 0; i<str.length(); i++){ if(flags[str.charAt(i)] == 1){ return i; } } return -1; } }
最新回复(0)