字符串类Leetcode520

检测大写字母

520 题目: 给定一个单词,你需要判断单词的大写使用是否正确。

1. 我们定义,在以下情况时,单词的大写用法是正确的:
2. 全部字母都是大写,比如"USA"。
3. 单词中所有字母都不是大写,比如"leetcode"。
4. 如果单词不只含有一个字母,只有首字母大写, 比如 "Google",否则,我们定义这个单词没有正确使用大写字母。

我的解法:

思路是:
仅仅判断前两个字符,就可以确定整个字符的走向
大写 + 大写 = 整体大写
大小+ 小写 = 整体小写
小写+小写 = 整体小写
其余均为不合法

class Solution {
    public boolean detectCapitalUse(String word) {
        int flag1 = -1;
        int flag2 = -1;
        int flag = -1;
        
        if (word.length() <= 1) {
            return true;
        }
        for (int i = 0; i< word.length(); i++) {
            char c = word.charAt(i);
            if (i == 0) {
                flag1 = isUpperOrLower(c);
                
            }
            else if (i == 1){
                flag2 =isUpperOrLower(c);
                if (flag2 == -1)
                    return false;
                if(flag1==1 && flag2==1) {
                    flag = 1;
                }
                if (flag1==1 && flag2==0) {
                    flag = 0;
                }
                if (flag1== 0 && flag2==0) {
                    flag = 0;
                }
                if (flag1 == 0 && flag2 == 1) {
                    return false;
                }
            } else {
                if (isUpperOrLower(c)!= flag) {
                    return false;
                }
            }
        
        }
        return true;
        
    }
    public int isUpperOrLower(char c){
        if (c<='Z'&& c>= 'A') {
            return 1;
        } else if (c<='z'&&c>= 'a') {
            return 0;
        }
        return -1;

    }
}

答案解法

声明cnt记录大写字母的个数; 声明index记录大写字母的位置索引; 当cntword.length,即所有字母都大写,返回true;
或者,当cnt
1,且index0,即只有首个字母是大写时,返回true; 或者,当cnt0,即所有字母均小写时,返回true;
当cnt>1且cnt<word.length时,返回false;
当cnt==1,但index!=0,即有一个大写字母,但该大写字母不在首位,返回false;

作者:Zhang191031
链接:https://leetcode-cn.com/problems/detect-capital/solution/bian-li-yi-bian-zi-fu-chuan-ji-lu-da-xie-zi-mu-ge-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {
    public boolean detectCapitalUse(String word) {
        int cnt = 0;
        int index = 0;
        for(int i = 0;i<word.length();i++) {
            if(word.charAt(i)-'A'<=25) {
                cnt++;
                index = i;
            }
        }
        if((cnt==word.length())||(cnt==1&& index ==0)||(cnt==0)) {
            return true;
        }
        if((cnt>1&&cnt<word.length())||(cnt==1&&index!=0)) {
            return false;
        }
        return false;
    }
}

30天c++leetcode算法训练

06-17
作为要准备踏入码农行业的人来说,怎么能不去刷刷LeetCode呢?LeetCode收录了许多互联网公司、IT企业的笔试题目,被称为刷题神器。同样的,不少非计算机专业的科班出身的学员朋友,做的编程还是挺多的,在编程过程中或多或少觉得自己的“野路子”实在太多,有时不仅写得煎熬,而且书写很多时候都非常不规范。因此,学习、借鉴、模仿高手的代码套路,不仅仅有助于提升职业技能,更进一步的也能增加自己求职的底气和心气。Leetcode是面向职场就业的,而非追求高度思维技巧的ACM竞赛,特别是LeetCode的基础题目并不多,目前大概有358道,而且其题型都非常简单明了,并不需要的复杂的理解,一般都在50行左右就可以解决。这有助于广大的求职朋友建立自信,提升技能。本门课程分精选了30道题目,从vs code刷题环境搭建起手,手把手的进行了课程引导,以期能帮助广大求职人员,积累知识,提升技能,不过有些题是加锁的,好像有付费才能使用,能做的题应该有150多道吧,这也是完全足够了。   另外,如果你写了上百行代码,就肯定说明你想太多了或太复杂,虽然都能用很短的代码就能解决,但并不意味着LeetCode的题目非常简单,实际上LeetCode基本上涉及到了所有常规的算法型。   关于LeetCode的刷题时间:个人认为大概是要一个月左右,如果你是大神的话,也许大概能在两到三个星期间刷 完,不过做为新手,除了埋头做题,更重要的是去讨论区看看别人的代码或思路。一道一道刷题虽然速度慢了点,不过会学到了许多。为了帮助广大学员朋友切实提升程序开发技巧,积累学习信心,克服畏难情绪,丁宋涛和夏曹俊老师共同精心设计了本门课程。希望通过本门课程可以分享知识,掌握技能。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值