2278 题目描述💎:
给你一个字符串 s 和一个字符 letter ,返回在 s 中等于 letter 字符所占的 百分比 ,向下取整到最接近的百分比。
示例 1:
输入:s = "foobar", letter = "o"
输出:33
解释:
等于字母 'o' 的字符在 s 中占到的百分比是 2 / 6 * 100% = 33% ,向下取整,所以返回 33 。
示例 2:
输入:s = "jjjj", letter = "k"
输出:0
解释:
等于字母 'k' 的字符在 s 中占到的百分比是 0% ,所以返回 0 。
解题思路💎:
定义一个记录相同字符的数字
将字符串转成字符数组 toCharArray();
迭代一次遍历 最后按要求输出计算结果
代码附上 💎:
class Solution { public int percentageLetter(String s, char letter) { int len=s.length(); int count=0; char cc[]=s.toCharArray(); for(char c:cc){ if(c==letter){ count++; } } //return (int)(count*1.0/len*100); return count*100/len; } }
551 题目描述💎:
给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
'A':Absent,缺勤
'L':Late,迟到
'P':Present,到场
如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
按 总出勤 计,学生缺勤('A')严格 少于两天。
学生 不会 存在 连续 3 天或 连续 3 天以上的迟到('L')记录。
如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。
示例 1:
输入:s = "PPALLP"
输出:true
解释:学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。
示例 2:
输入:s = "PPALLL"
输出:false
解释:学生最后三天连续迟到,所以不满足出勤奖励的条件。
解题思路:💎
根据题意模拟即可
注意题目给的条件
1.按 总出勤 计,学生缺勤('A')严格 少于两天。
2.学生 不会 存在 连续 3 天或 连续 3 天以上的迟到('L')记录。
定义两个变量来记录迟到跟缺席的次数
如果字符等于'A'则记为一次缺席 缺席次数加1
如果字符等于'L'则记为一次迟到,迟到次数加1,反正将连续迟到次数清零
代码附上💎:
class Solution { public boolean checkRecord(String s) { int absentnumber=0; int latenumber=0; for(int i=0;i<s.length();i++){ char ch=s.charAt(i); if(ch=='A'){ absentnumber++; if(absentnumber>=2){ return false; } } if(ch=='L'){ latenumber++; if(latenumber>=3){ return false; } } else{ latenumber=0; } } return true; } }
2255.题目描述:💎
给你一个字符串数组 words 和一个字符串 s ,其中 words[i] 和 s 只包含 小写英文字母 。
请你返回 words 中是字符串 s 前缀 的 字符串数目 。
一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。
示例 1:
输入:words = ["a","b","c","ab","bc","abc"], s = "abc"
输出:3
解释:
words 中是 s = "abc" 前缀的字符串为:
"a" ,"ab" 和 "abc" 。
所以 words 中是字符串 s 前缀的字符串数目为 3 。
示例 2:
输入:words = ["a","a"], s = "aa"
输出:2
解释:
两个字符串都是 s 的前缀。
注意,相同的字符串可能在 words 中出现多次,它们应该被计数多次。
解题思路💎:
这道题思路还是很清晰的
首先一个枚举 接着一个判定
定义一个方法判断是否是给定字符串的前缀
代码附上💎:
class Solution { public int countPrefixes(String[] words, String s) { int count=0; for(int i=0;i<words.length;i++){ if(isqianzhui(words[i],s)){ count++; } } return count; } public boolean isqianzhui(String s1,String s2){ //特判两种情况 if(s1.length()> s2.length()){ return false; } for(int i=0;i<s1.length();i++){ if(s1.charAt(i)!=s2.charAt(i)){ return false; } } return true; } }
1071 题目描述💎:
对于字符串 s 和 t,只有在 s = t + ... + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。
给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 X 能除尽 str2 。
示例 1:
输入:str1 = "ABCABC", str2 = "ABC"
输出:"ABC"
示例 2:
输入:str1 = "ABABAB", str2 = "ABAB"
输出:"AB"
示例 3:
输入:str1 = "LEET", str2 = "CODE"
输出:""
解题思路💎:
定义一个求最大公约数的方法
如果 str1 和 str2 存在最大公约数 str,那么就相当于 str1 和 str2 都是由 str 组成的,那么 str1 + str2 和 str2 + str1 应该是相等的 如果不满足,那么不存在最大公约数 我们可以通过 两个字符串的长度来求得最大公约数的长度
代码附上💎:
class Solution { public String gcdOfStrings(String str1, String str2) { // 如果 str1 和 str2 存在最大公约数 str,那么就相当于 str1 和 str2 都是由 str 组成的,那么 str1 + str2 和 str2 + str1 应该是相等的 如果不满足,那么不存在最大公约数 我们可以通过 两个字符串的长度来求得最大公约数的长度 if(!(str1+str2).equals(str2+str1)){ return ""; } return str1.substring(0,gcd(str1.length(),str2.length())); } public int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } }
以上就是小王同学给大家带来的力扣刷题-字符串篇