力扣(LeetCode)1704. 判断字符串的两半是否相似(C++)

双指针

设置双指针 i 、 j i、j ij   i ~i  i 0 0 0 s . s i z e ( ) 2 − 1 \dfrac {s.size()}2-1 2s.size()1 j j j s . s i z e ( ) 2 \dfrac {s.size()}2 2s.size() s . s i z e ( ) s.size() s.size()。当 i i i 指向元音, c n t + + cnt++ cnt++,当 j j j 指向元音 c n t − − cnt-- cnt。由于 s . s i z e ( ) s.size() s.size() 是偶数,双指针的遍历同时结束。遍历结束,如果 c n t = 0 cnt=0 cnt=0 两半相似,否则不相似。

代码展示
class Solution {
public:
    bool halvesAreAlike(string s) {
        int len = s.size()/2;//子串长度
        int cnt = 0;
        string h = "aeiouAEIOU" ;
        for(int i =0,j=len;i<len;i++,j++){
            if(h.find(s[i])!=string::npos) cnt++;
            if(h.find(s[j])!=string::npos) cnt--;
        }
        if(cnt) return false;
        return true;
    }
};
博主致语

理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。

AC

AC

复杂度分析
  1. 时间复杂度: O ( n ) O(n) O(n) n n n 是字符串 s s s 的长度,一次遍历 s s s 的时间复杂度 O ( n ) O(n) O(n)
  2. 空间复杂度: O ( ∣ C ∣ ) O(|C|) O(C) ∣ C ∣ = 10 |C| = 10 C=10,是元音字符串 h h h 的长度。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清墨韵染

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值