剑指offer(三十八)之第一个只出现一次的字符位置

题目描述

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始

思路分析:

1.先把字符串存到字节数组当中

2.设置一个标志位,再用两个FOR循环

<span style="font-family:SimSun;font-size:24px;">public class Solution {
    public int FirstNotRepeatingChar(String str) {
        if(str.length()==0){
            return -1;
        }
        char []c=new char[10000];
        for(int i=0;i<str.length();i++){
            c[i]=str.charAt(i);
        }
        for(int i=0;i<str.length();i++){
          int flag=0;
          for(int j=0;j<str.length();j++){
              if(c[i]==c[j]){
                  flag++;
              }
          }
          if(flag==1){
              return i;
          }
        }
        return -1;
    }
}</span>
时间: 2024-11-09 16:00:14

剑指offer(三十八)之第一个只出现一次的字符位置的相关文章

剑指offer(二十八)之丑数

题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路分析: 1.首先,丑数都是由前5个丑数1,2,3,4,5乘以因子2,3,5才得到的. 2.这里将得到的丑数都存放在数组中.分析一下得到第6个丑数的过程,其他丑数类比. 3.1 将前5个丑数乘以2,然后与第5个丑数进行比较,找出第一个乘以2大于第5个丑数的丑数,将其放在min2中. 3.2 将前5个丑数乘以

剑指offer(五十八)之正则表达式匹配

题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 代码: <span style="color:#000099;">pu

剑指offer(三十六)之栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. <span style="font-size:18px;color:#cc33cc;">import java.util.*; public class Solution { public boolea

剑指offer(四十八)之复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 代码: <span style="color:#000099;">import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; public class Solution { public RandomListNod

剑指offer(三十)之扑克牌顺子

题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!"红心A,黑桃3,小王,大王,方片5","Oh My God!"不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13.上面的5张牌就可以变成"1,2,3,4,5"

剑指offer(三十二)之把字符串转换成整数

题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 思路分析: 1.判断字符串是否空 2.定义一个符号位变量和结果变量,并将字符串转为字符数组 3.判断是正数,还是负数 4.判断是否是0-9之间数 代码: <span style="font-family:SimSun;font-size:18px;">public class Solution { public int StrToInt(String str) { if(str==null||str

剑指offer(三十四)之二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 代码1: 采用递归的方法,递归深度大时内存容易爆掉 <span style="font-size:18px;">/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n

剑指offer第十八题 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 解题思路:一次去掉一个外圈,当最后只剩一行或一列时停止递归.(ps:这题就是绕,仔细点就解决了!!!) 1 import java.util.ArrayList; 2 public class Solution { 3 publ

第一个只出现一次的字符位置-剑指Offer

第一个只出现一次的字符位置 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 思路 每个字符都做对比的时间复杂度为O(n2),所以我们创建一个哈希表来存储每个字符对应的出现次数,扫描一次存储次数,扫描第二次找出第一个只出现一次的字符,时间复杂度O(n) 牺牲空间换取时间,哈希表查找的时间为O(1) 注意:最后没有符合这样条件的字符的情况 代码 public class Solution { publ