package main
import (
"unicode"
)
func (_ Solution) DetectCapitalUse(word string) bool {
runes := []rune(word)
// hammasi katta bolsa true
allLetterUpper := true
for _, v := range runes{
if !unicode.IsUpper(v){
allLetterUpper = false
break
}
}
if allLetterUpper {
return true
}
// faqat birinchisi katta bolsa true
if len(runes) > 0 && unicode.IsUpper(runes[0]) {
for i := 1; i < len(runes); i ++ {
if unicode.IsUpper(runes[i]){
return false
}
}
return true
}
// hammasi kichik bolsa
allLetterLower := true
for _, v := range runes{
if !unicode.IsLower(v){
allLetterLower = false
break
}
}
if allLetterLower {
return true
}
return false
}
Buyerda biz 3 xil xolatga tekshirishimiz kerak.
1) Birinchi katta harf bolib qolganlari kichik bolsa true.
2) Hamma harflari katta harfda bolsa true
3) aralash bolsa false qaytarishimiz kerak
Dastlab berilgan stringni textni rune larga aylantirib olamiz, chunki stringni ozini detalniy har biridan otib chiqishimiz uchun uni har bir elementini aloxida olishimiz kerak!
xop undan keyin birinchi, tekshiruv hammasi katta bolsa
bitta ozgaruvchi belgilab oldim va for range orqali beruilgan textni har bir elementini tekshirib yurib otdim agar birortasi katta bolmasa belgilab olgan ozgaruvchimni false qilib olaman va return false qaytaraman
xop undan keyin ikkinchi, tekshiruv faqat birinchi harf katta bolsa
men hammasi kattami degan xoaltga check yozdim, unda bunday boladi text uzunligi 0 dan katta va birinchi harfi katta bolsa for ga kiradi
yani birinchi harf katta bolsagina keyingi qolgan harflarni tekshiramiz bolmasam, shuyerning ozidan false return qilamiz
va har bir elementdan for orqali otamiz faqat birinchi harfni olmaymiz yani 0 dan emas 1-indexdan sanashni boshlaymiz
uchinchisi kichik xolatga tekshirish
unda ham ozgaruvchiga olib keyin agar biror harf katta bolib qolsa ozgaruvchisni false qilaman va if da tekshirganimda true bolsagina true qaytaramiz