题解《算法零基础100讲》(第24讲) 字符串算法 - 字符计数法(java版)
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解《算法零基础100讲》(第24讲) 字符串算法 - 字符计数法(java版)相关的知识,希望对你有一定的参考价值。
😁算法小白欢迎加入此社区:https://bbs.csdn.net/forums/hero?category=0
由英雄大佬带领的抱团学算法队伍,从0开始,期待你的加入🥳
本博文是对此文章习题所作的题解,如有不足,请多指教:https://blog.csdn.net/WhereIsHeroFrom/article/details/121295716
今日题解:
第一题:https://leetcode-cn.com/problems/is-unique-lcci/
我们使用嵌套循环,先把字符串转换为数组,然后遍历即可。
class Solution
public boolean isUnique(String astr)
char[] c = astr.toCharArray();
int i,j;
for(i = 0; i < c.length; i++)
for(j = i + 1 ; j < c.length; j++)
if(c[i] == c[j])
return false;
return true;
第二题:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/
我们先遍历一遍数组,把出现的字母存到数组里面,然后再进行一次遍历,如果出现了出现次数是1的字母就返回。
class Solution
public char firstUniqChar(String s)
int l = s.length();
int[] array = new int[80];
int i,j;
char c;
for (i = 0; i < l; i++)
c = s.charAt(i);
array[c - 'a']++;
for (i = 0; i < l; i++)
c = s.charAt(i);
if (array[c - 'a'] == 1)
return c;
return ' ';
第三题:https://leetcode-cn.com/problems/ransom-note/
我们先遍历一遍数组,遇到了就统计出现的次数,然后再进行一次循环遍历,如果他的次数是0,就代表还没有出现过,直接返回false,否则我们进行一次次数的抵消。
class Solution
public boolean canConstruct(String ransomNote, String magazine)
char[] count = new char[80];
int i;
for (i = 0; i < magazine.length(); i++)
count[magazine.charAt(i) - 'a']++;
for (i = 0; i < ransomNote.length(); i++)
if (count[ransomNote.charAt(i) - 'a'] == 0)
return false;
else
count[ransomNote.charAt(i)- 'a']--;
return true;
第四题:https://leetcode-cn.com/problems/jewels-and-stones/
比较简单,直接遍历即可。
class Solution
public int numJewelsInStones(String jewels, String stones)
char[] c1 = jewels.toCharArray();
char[] c2 = stones.toCharArray();
int i,j,count=0;
for(i = 0; i < c1.length; i++)
for(j = 0; j < c2.length; j++)
if(c1[i] == c2[j])
count++;
return count;
第五题:https://leetcode-cn.com/problems/check-permutation-lcci/
先排序,然后比较两个数组是否相等,相等即满足题目的要求。
class Solution
public boolean CheckPermutation(String s1, String s2)
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
if(Arrays.equals(c1, c2))
return true;
else
return false;
第六题:https://leetcode-cn.com/problems/check-if-all-characters-have-equal-number-of-occurrences/
class Solution
public boolean areOccurrencesEqual(String s)
int[] array=new int[26];
int i,j;
for(i=0; i<s.length(); i++)
array[s.charAt(i)-'a']++;
for(i=0; i<26; i++)
if(array[s.charAt(0)-'a']!=array[i] && array[i]!=0)
/*我每一个字符出现的次数一样,我才可以算作是好字符串,
所以array[s.charAt(0)-'a']!=array[i]就代表有一个字符的次数与其他的不一样,
并且array[i]!=0,也就是这个字符确实存在于你的输入里面,那么此时不符合题意。*/
return false;
return true;
第七题:https://leetcode-cn.com/problems/valid-anagram/
先排序,然后比较是否相等,思路也很简单。
class Solution
public boolean isAnagram(String s, String t)
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
if(Arrays.equals(c1, c2))
return true;
else
return false;
第八题:https://leetcode-cn.com/problems/dKk3P7/
思路也可以将上一道题的思路反过来,我们先判断是否是不完全相同,然后再判断里面所含的字母是否完全相同。
class Solution
public boolean isAnagram(String s, String t)
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
int i,j,flag=1;
for(i = 0; i < c1.length; i++)
for(j = 0; j < c2.length; j++)
if(c1[i] != c2[j])
flag = 1;
break;
else
flag = 0;
if(flag == 1)
Arrays.sort(c1);
Arrays.sort(c2);
if(Arrays.equals(c1, c2))
return true;
else
return false;
else
return false;
第九题:https://leetcode-cn.com/problems/check-if-the-sentence-is-pangram/
先定义一个数组,我们先把字母表存进去,然后我们遍历我们的字符串,如果包含,我们就定义一个变量,并且跳出判断,只有当判断到最后一个字母并且变量值符合条件,我们才会返回true,否则返回false。
class Solution
public boolean checkIfPangram(String sentence)
char[] Zimu = new char[]'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z';
int i,j;
char[] c = sentence.toCharArray();
for(i = 0; i < 26; i++)
int flag = 0;
for(j = 0; j < sentence.length(); j++)
if(Zimu[i] == sentence.charAt(j))
flag = 1;
break;
if(flag == 0)
return false;
if(flag == 1)
continue;
if(flag == 1 && i == 25)
return true;
return true;
第十题:https://leetcode-cn.com/problems/kth-distinct-string-in-an-array/
第一次遍历,将arr数组中所有的字符串保存到哈希表中,其中哈希表的key保存字符串,value保存每个字符串出现次数。第二次遍历,将哈希表中只出现一次的字符串添加到ArrayList中。
class Solution
public String kthDistinct(String[] arr, int k)
Map<String, Integer> map = new HashMap<>();
int i;
for (i = 0; i < arr.length; i ++)
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
List<String> list = new ArrayList<>();
for (i = 0; i < arr.length; i ++)
if (map.get(arr[i]).equals(1))
//如果arr[i]所对应的出现次数等于1,表示这个只出现过1次
list.add(arr[i]);
if(list.size() < k)
return "";
else//若k比list的长度还大,返回空,否则,返回list中第(k - 1)个元素
return list.get(k - 1);
有问题欢迎留言,欢迎加入“万人千题”社区,在这里一起努力。
以上是关于题解《算法零基础100讲》(第24讲) 字符串算法 - 字符计数法(java版)的主要内容,如果未能解决你的问题,请参考以下文章
《算法零基础100讲》(第24讲) 字符串算法 - 字符计数法
题解《算法零基础100讲》(第26讲) 字符串算法 - 回文串(java版)
题解《算法零基础100讲》(第22讲) 字符串算法 - 字符串比较(java版)
题解《算法零基础100讲》(第6讲) 日期算法(java版)