剑指Offer33 SingleChar(字符串遍历)

2019-01-09  本文已影响0人  北国雪WRG

在一个字符串(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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读