• lintcode入门篇七


    211. 字符串置换

    给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。

    置换的意思是,通过改变顺序可以使得两个字符串相等。

    样例

    Example 1:
    	Input:  "abcd", "bcad"
    	Output:  True
    
    
    Example 2:
    	Input: "aac", "abc"
    	Output:  False
    class Solution:
        """
        @param A: a string
        @param B: a string
        @return: a boolean
        """
        def Permutation(self, A, B):
            # write your code here
            dic_A,dic_B = {},{}
            for i in A:
                dic_A[i] = dic_A.get(i,0)+1##每次循环,相同字符的值加1,初始值为0
            for j in B:
                dic_B[j] = dic_B.get(j,0)+1
            return dic_A == dic_B

    13. 字符串查找

    中文English

    对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1

    样例

    样例 1:

    输入: source = "source" , target = "target"
    输出:-1	
    样例解释: 如果source里没有包含target的内容,返回-1
    

    样例 2:

    输入: source = "abcdabcdefg" ,target = "bcd"
    输出: 1	
    样例解释: 如果source里包含target的内容,返回target在source里第一次出现的位置
    

    挑战

    O(n2)的算法是可以接受的。如果你能用O(n)的算法做出来那更加好。(提示:KMP)

    说明

    在面试中我是否需要实现KMP算法?

    • 不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。
    class Solution:
        '''
        大致思路:
        1.以target长度进行切割,依次循环切割,如果遇到符合条件的话,就直接return。
    
        '''
        def strStr(self,source,target):
            for i in range(len(source)+1):##for i in range(len(source)-len(target)+1)同样可以,因为按len(target)来切割,切到len(source)-len(target)才是完整
                if source[i:i+len(target)] == target:
                    return i
            return -1
    
    

    213. 字符串压缩

    设计一种方法,通过给重复字符计数来进行基本的字符串压缩。

    例如,字符串 aabcccccaaa 可压缩为 a2b1c5a3 。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。

    可以假设字符串仅包括 a-z 的字母。

    样例

    样例 1:

    输入:str = "aabcccccaaa"
    输出:"a2b1c5a3"
    

    样例 2:

    输入:str = "aabbcc"
    输出:"aabbcc"

    class Solution:
        '''
        大致思路:
        1.初始化一个p为None,如果下一个值和p不同的话,则开始重置。否则的话开始计数
        2.同时的话开始拼接字符串。
        '''
        def compress(self,originalString):
            p = ''
            count = 0
            new_str = ''
            for i in originalString + ' ':
                ##如果是最后一位的话,那么就是空格,则需要加上最后一个count
                if i == ' ':
                    new_str = new_str + str(count)
                elif i != p:
                    p = i
                    new_str = new_str + str(count) + p
                    count = 1
                else:
                    count = count + 1
                    p = i##此p = i可不加,只有出现新的字符的时候,p才更新,此时还是原字符,只是持续计数。
            
            ##做个判断,如果新字符串长度<原字符串长度,则返回新字符串长度,否则的话返回原字符串长度
            if len(new_str[1:]) < len(originalString):
                return new_str[1:]
            else:
                return originalString

    大致解释:(部分计数+拼接的方式)

    1.初始化p为'',count=0,new_str = ''

    2.初始字符串加上' ',以便原来最后一个字符加上计数

    3.循环字符串,如果是新的字符的话,则count重置为1,p则更新为当前新的字符,同时new_str拼接(new_str = new_str + count + p,不能new_str=new_str+p+count,因为count有初始值0)

    4.如果是旧的字符的话,则count持续加1,p不变。如果i为' ',说明是最后一个字符,则加上最后一个字符计数即可。注意if,elif顺序。

    5.最后的时候需要做个判断,如果是新字符串小于原字符串的话,则返回新字符串[1:],需要去掉首位0,否则的话需要返回原字符串。

  • 相关阅读:
    c#中Split等分割字符串的几种方法
    js中的null和undefined的区别
    限制CheckBoxList选中的数量
    js中的boolean原始类型和Boolean引用类型
    div漂浮在flash上面
    关于导出excel是经常出现的几个问题
    关于表的合并
    框架
    Js实现类似图片相册左右切换效果
    DNS域名系统
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12417177.html
Copyright © 2020-2023  润新知