算法练习第二天——字符串

2315. 统计星号

思路:一次遍历,我们统计‘|’的次数,当为偶数时,我们统计后面*的个数,最后返回

代码:

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;
  }
}

459. 重复的子字符串

思路:

如果字符串 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);
  }
}

1790. 仅执行一次字符串交换能否使两个字符串相等

思路:首先判断是否相同,相同直接返回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));
    }
}

1961. 检查字符串是否为数组前缀

思路:直接遍历相加比较,相同返回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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值