468. Validate IP Address - cocoder39/coco39_LC GitHub Wiki

468. Validate IP Address

class Solution:
    def validIPAddress(self, queryIP: str) -> str:
        segments = queryIP.split('.')
        if len(segments) == 4:
            if self.isV4(segments):
                return 'IPv4'
            else:
                return 'Neither'
        
        segments = queryIP.split(':')
        if len(segments) == 8 and self.isV6(segments):
            return 'IPv6'
        return 'Neither'
    
    def isV4(self, segments):
        for segment in segments:
            if len(segment) == 0 or len(segment) > 3:
                return False
            num = 0
            for ch in segment:
                if not ch.isdigit():
                    return False
                if ch == '0' and num == 0 and len(segment) != 1:
                    return False
                num = num * 10 + ord(ch) - ord('0')
            if num > 255:
                return False
        return True
        

    def isV6(self, segments):
        for segment in segments:
            if len(segment) == 0 or len(segment) > 4:
                return False
            for ch in segment:
                if ch not in '0123456789abcdefABCDEF':
                    return False
        return True