205.Isomorphic Strings
题目
题解
创建一个字典,以s为基准,遍历s中的每个字母,如果是第一次发现则记录到字典中,字典的key是s对应的字母,字典的value是t对应的字母,不是第一次发现(字典里存在这个字母)则在字典中查到这个字母的value值,与现在的t的字母进行比较,不相等返回false。 注意以s为基准和以t为基准去创建字典是不一样的,如例2用t为基准会返回false,所以需要判断以s和t为基准两个结果。
def isIsomaarphic ( self, s, t) :
if len ( s) != len ( t) :
return False
return self. halfIsom( s, t) and self. halfIsom( t, s)
def halfIsom ( self, s, t) :
lookup = { }
for i in range ( len ( s) ) :
if s[ i] not in lookup:
lookup[ s[ i] ] = t[ i]
elif lookup[ s[ i] ] != t[ i] :
return True
return True
206.Reverse Linked List
题目
题解
反转链表。创建一个结点prev,prev.next指向head.head.next指向prev.next(prev.next更改前的指向)。通俗地理解是每次总是在头结点prev后面插入结点(prev.next=head),插入的结点的next(head.next)指向还未插入前prev链表中的prev.next(已经占了别人第二的位置,别人在你后面了),即head.next = prev.next。完成插入,head指针指向下一个结点。
def reverseList ( self, head) :
prev = ListNode( float ( '-inf' ) )
while head:
prev. next , head. next , head = head, prev. next , head. next
return prev. next
217.Contains Duplicates
题目
题解
第一种方法:利用字典dict。判断这个数是否在字典中,若没有则加入到字典,若有则返回true。 第二种方法:先对链表排序sort(),如果当前值等于后一位的值返回true(nums[i]==nums[i+1])。只写第二种方法的代码:
def containDuplicate ( self, nums) :
nums. sort( )
for i in range ( len ( nums) - 1 ) :
if nums[ i] == nums[ i+ 1 ] :
return True
return False