字符串中的第一个唯一字符
//利用哈希表来进行操作
class Solution {
public int firstUniqChar(String s) {
HashMap<Character, Integer> count = new HashMap<Character, Integer>();
int n = s.length();
// build hash map : character and how often it appears
for (int i = 0; i < n; i++) {
char c = s.charAt(i);//返回指定索引处的字符
count.put(c, count.getOrDefault(c, 0) + 1);
}
// find the index
for (int i = 0; i < n; i++) {
if (count.get(s.charAt(i)) == 1)
return i;
}
return -1;
}
}
哈希表还得继续学
算法的思路就是遍历一遍字符串,然后把字符串中每个字符出现的次数保存在一个散列表中。这个过程的时间复杂度为 O(N),其中 N 为字符串的长度。
接下来需要再遍历一次字符串,这一次利用散列表来检查遍历的每个字符是不是唯一的。如果当前字符唯一,直接返回当前下标就可以了。第二次遍历的时间复杂度也是 O(N)
有效的字母异位词
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] counter = new int[26];
for (int i = 0; i < s.length(); i++) {
counter[s.charAt(i) - 'a']++;
counter[t.charAt(i) - 'a']--;
}
for (int count : counter) {
if (count != 0) {
return false;
}
}
return true;
}
还是哈希表
哈希表详解
-
HashMap概述:
HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 -
HashMap的数据结构:
在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
HashMap使用键值对存储,只需传入相应的键-值即可存储。
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
for(Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
运行结果是:
key1:1
key2:2
key3:3
读取对应的键值map.get(“key3”)
后面再起一个文章记录吧
验证回文字符串
//先提取出有效字符串,在进行判断回文串
class Solution {
public boolean isPalindrome(String s) {
char[] cs = s.toCharArray();
int cnt = 0, j = 0;
for (int i = 0; i < cs.length; i++) {
if (('0' <= cs[i] && cs[i] <= '9') || ('a' <= cs[i] && cs[i] <= 'z')) {
cs[cnt++] = cs[i];
} else if ('A' <= cs[i] && cs[i] <= 'Z') {
cs[cnt++] = (char) (cs[i] - 'A' + 'a');
}
}
cnt--;
while (j < cnt) if (cs[j++] != cs[cnt--]) return false;
return true;
}
}
来源:CSDN
作者:xfgg
链接:https://blog.csdn.net/qq_42337039/article/details/104172647