思路:一次遍历,我们统计‘|’的次数,当为偶数时,我们统计后面*的个数,最后返回
代码:
class Solution {
public int countAsterisks(String s) {
int n = s.length(), count = 0, split = 0;
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
if (c == '|') split++;
if (split % 2 == 0 && c == '*') {
count++;
}
}
return count;
}
}
思路:
如果字符串 S 包含一个重复的子字符串,我们可以创建一个新的字符串 str,它等于原来的字符串 S 再加上 S 自身。可以直接判断 str 中去除首尾元素之后,是否包含自身元素。如果包含。则表明存在重复子串。
class Solution {
public boolean repeatedSubstringPattern(String s) {
String str = s + s;
return str.substring(1, str.length() - 1).contains(s);
}
}
思路:首先判断是否相同,相同直接返回true,不同的话,我们进行遍历,对相同位置下的不同字符进行存储,当不同的个数超过4个,证明交换超过一次,直接返回false;对于不同的个数为4个时,我们要比较对应位置的字符是否相同,相同返回true,不同返回false
代码:
class Solution {
public boolean areAlmostEqual(String s1, String s2) {
if(s1.equals(s2)){
return true;
}
StringBuffer sb = new StringBuffer();
for(int i=0; i<s1.length(); i++){
//超过4个,说明交换超过一次
if(sb.length() > 4){
return false;
}
//记录两个字符串中所有不同的字符
if(s1.charAt(i) != s2.charAt(i)){
sb.append(s1.charAt(i));
sb.append(s2.charAt(i));
}
}
//比较一次交换的字符
return sb.length() == 4 && (sb.charAt(0) == sb.charAt(3) && sb.charAt(1) == sb.charAt(2));
}
}
思路:直接遍历相加比较,相同返回true
class Solution {
public boolean isPrefixString(String s, String[] words) {
String t = "";
for(String i : words) {
t = t + i;
if(t.equals(s)) return true;
}
return false;
}
}