思路清晰,并不复杂,用程序表达就行了

``` python []
while True:
    try:
        s=str(input())
        flag="OK"
        #1、先排除长度大于2的公共元素字串
        #搞一个指针
        for i in range(len(s)):
            for j in range(1+i,len(s)+1):
                if j-i>2 and s.count(s[i:j])>=2:
                    #print(s[i:j])#测试用拿021Abc9Abc1测试应该输出的就是ABC了
                    flag="NG"#解决子元素重复项
        #print(flag)#拿021Abc9Abc1测试是否输出NG
        #2、筛选长度超过8位的
        if len(s)<=8:
            flag="NG"
        
        #3、最后再解决四种至少3种,写4个flag就行了
        flagU=0#大写flag判断位
        flagL=0#小写flag判断位
        flagD=0#数字flag判断位
        flagT=0#特殊符号判断位
        for i in s:#一个循环遍历
            if i.isupper():#大写判断
                flagU=1
            if i.islower():#小写判断
                flagL=1
            if i.isdigit():#数字判断
                flagD=1
            if i in "!~@#$%^&*-+_=":#特殊字符判断,可能不全,到时候再看
                flagT=1
        count=flagU+flagL+flagD+flagT
        if count<3:#至少3种
            flag="NG"
        print(flag)
    except:
        break