LeetCode 003 字符串系列
Posted Al_tair
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 003 字符串系列相关的知识,希望对你有一定的参考价值。
字符串(二)
大家好!我是小笙!我们即将开始探索的是字符串(二)系列的题型,刷题一开始刷起来感觉很难,但是一直刷题一直爽,我们可以从中享受到刷题的快乐!加油!坚持下去
字符串(二)系列题型如下
字符串系列二
字符的统计(387,242,49)
387题 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = “leetcode”
返回 0
s = “loveleetcode”
返回 2
提示:你可以假定该字符串只包含小写字母。
方法一:暴力解法(MyCode)
对于这道题,我的想法是直接按题目要求,进行嵌套循环,寻找是否有重复的字符,方法暴力但不高效
class Solution {
public int firstUniqChar(String s) {
int n = s.length() - 1;
Boolean flag = false; // 用来判断有无找到重复的字符
for(int i=0;i<=n;i++){
flag = false;
for(int j=n;j>=0;j--){
if(s.charAt(i) == s.charAt(j) && i != j){
flag = true;
break;
}
}
if(flag == false){
return i;
}
}
return -1;
}
}
执行用时:41 ms, 在所有 Java 提交中击败了12.88%的用户
内存消耗:38.5 MB, 在所有 Java 提交中击败了94.21%的用户
方法二:函数的运用(Other’sCode)
函数是精髓!
// int indexOf(String str, int fromIndex)
// 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
// int lastIndexOf(int ch)
// 返回指定字符在此字符串中最后一次出现处的索引。
class Solution {
public int firstUniqChar(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) {
return i;
}
}
return -1;
}
}
方法三:使用哈希表存储频数(Other’sCode)
官方解题思路
在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 -1−1。
// put() 将键/值对添加到 hashMap 中
// getOrDefault() 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
class Solution {
public int firstUniqChar(String s) {
Map<Character, Integer> frequency = new HashMap<Character, Integer>();
for (int i = 0; i < s.length(); ++i) {
// 使用哈希映射统计出字符串中每个字符出现的次数
char ch = s.charAt(i);
frequency.put(ch, frequency.getOrDefault(ch, 0) + 1);
}
for (int i = 0; i < s.length(); ++i) {
if (frequency.get(s.charAt(i)) == 1) {
return i;
}
}
return -1;
}
}
242题 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram” 输出: true
示例 2:
输入: s = “rat”, t = “car” 输出: false
提示:
1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母
以上是关于LeetCode 003 字符串系列的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode刷题系列 - 003题Longest Substring Without Repeating Characters