美文网首页
剑指Offer33 SingleChar(字符串遍历)

剑指Offer33 SingleChar(字符串遍历)

作者: 北国雪WRG | 来源:发表于2019-01-09 16:16 被阅读0次

    在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

    定位【易】

    1. 给每个字符设置一个计数器
    2. 使用Set辅助

    使用HashSet

    import java.util.*;
    
    public class Solution {
        public int FirstNotRepeatingChar(String str) {
            if (str.length() == 0) return -1;
            if (str.length() == 1) return 0;
    
            int p = 0;
            Set<Character> set = new HashSet<>(); // 非Single字符集合
    
            char[] chars = str.toCharArray();
    
            for (int i = 1; i < chars.length && p < chars.length; i++) {
                // 如果字符出现第二次
                if (chars[p] == chars[i]) {
                    set.add(chars[p]);     // 标记
                    while (p < chars.length && set.contains(chars[p])) {
                        p++;
                    }
                    i = p;
                }
            }
    
            if (p == chars.length) return -1;
            else return p;
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指Offer33 SingleChar(字符串遍历)

          本文链接:https://www.haomeiwen.com/subject/ahsgrqtx.html