剑指offer50a 第一个只出现一次的字符
暴力解法,O(n^2)。
另一个思路是HashMap,也比较简单。O(n)+O(n)。
import java.util.HashMap; public class Solution { public int FirstNotRepeatingChar(String str) { if(str==null||str.length()<1) return -1; HashMap<Character,Integer> map = new HashMap<>(); for(int i=0;i<str.length();i++){ if(map.containsKey(str.charAt(i))) map.replace(str.charAt(i),map.get(str.charAt(i))+1); else map.put(str.charAt(i),1); } for(int i=0;i<str.length();i++){ if(map.get(str.charAt(i))==1) return i; } return -1; } }
运行时间:31ms
占用内存:9472k
这一题虽然简单,但是衍生出来的几道题也都是很有质量的:
-两个字符串A和B,删除A中出现在B中的字符。
-删除某字符串中所有重复的字符,如goolge->gole。
-判断两个单词是不是互为变位词。
# -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here if s is None or len(s)<1: return -1 dic = {} for c in s: if c in dic.keys(): dic[c]+=1 else: dic[c]=1 for i,c in enumerate(s): if dic[c]==1: return i return -1
运行时间:37ms
占用内存:5848k

浙公网安备 33010602011771号