美文网首页
剑指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(字符串遍历)

    在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果...

  • 连续子数组最大和

    二刷: 剑指思路,只需要遍历一遍

  • 3. 字符串的扩展

    字符串的遍历接口 ES6为字符串添加了遍历器接口,使得字符串可被for..of循环遍历 for...of遍历字符串...

  • 按之字形顺序打印二叉树

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:树的广度遍历(层次遍历)、队列 题目描述: 请实现一...

  • 把二叉树打印成多行

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:树的广度遍历(层次遍历)、队列 题目描述: 从上到下...

  • 剑指Offer-60 层次遍历

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 技巧:使用Null 作为层的分隔符号。

  • String

    字符串的遍历器接口 ES6为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历 模版字符串 模版字符...

  • ES6:字符串的扩展

    1、字符串的遍历 ES6为字符串添加了遍历接口,使得字符串可以被 for...of 循环遍历。 2、include...

  • ES6:字符串的扩展

    1、字符串的遍历 ES6为字符串添加了遍历接口,使得字符串可以被 for...of 循环遍历。 2、include...

  • ES6 字符串的扩展

    字符串的遍历器接口 ES6为字符串添加了遍历器接口,使得字符串能够被for...of循环遍历 includes()...

网友评论

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

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