• leetcode 131. Palindrome Partitioning


    简单的思路:

    深度优先搜索:

    class Solution {
    public:
        
        bool isPalin(string str)
        {
            int n=str.length();
            int i=0;
            int j=n-1;
            while(i<j)
            {
                if(str[i]==str[j])
                {
                    i++;
                    j--;
                }
                else
                    return false;
            }
            return true;
        }
        void getPart(string s, vector<vector<string>>& result, vector<string> temp)
        {
            if(s.length()==0)
            {
                result.push_back(temp);
                return;
            }
            string str1;
            string str2;
            for(int i=1;i<=s.length();i++)
            {
                str1=s.substr(0,i);
              // cout<<str1<<endl;
                if(isPalin(str1))
                {
                    str2=s.substr(i);
                 //   cout<<str2<<endl;
                    temp.push_back(str1);
                    getPart(str2, result, temp);
                    temp.pop_back();
                }
            }
        }
        
        vector<vector<string>> partition(string s) {
            vector<vector<string>> result;
            vector<string> temp;
            getPart(s, result, temp);
            return result;
            
        }
    };
    

      

    python

    class Solution(object):
        
        def isPalin(self, s):
            n=len(s)-1
            m=0
            while(m<n):
                if(s[m]!=s[n]):
                    return False
                else:
                    m+=1
                    n-=1
            return True
        def dfs(self,s, stringlist):
            if len(s)==0: Solution.result.append(stringlist)
            for i in range(1, len(s)+1):
                if(self.isPalin(s[:i])):
                    self.dfs(s[i:],stringlist+[s[:i]])
        
        
        def partition(self, s):
            """
            :type s: str
            :rtype: List[List[str]]
            
            """
            Solution.result=[]
            self.dfs(s,[])
            return Solution.result
    

      

    python 中传参数?

    1. python 中对象有类型,变量没有类型。所有的变量都可以理解为一个对象的“引用”。类似c中的void *类型。
    • foo=1 # 指向int数据类型的foo(foo 没有类型)
    • lfoo=[1]# 指向list类型的lfoo。
    1. 可更改对象与不可更改对象
    • python中 strings, tuples, numbers 不可更改,
    • list, dict 可更改
    • foo=1
    • foo=2   内存中原始1 对象不可变,foo指向一个新的int 对象,
    • lfoo=[1]
    • lfoo[0]=2 更改list 中的第一个元素,list 可变,所有第一个元素变为2。 lfoo 指向一个包含一个对象的数组。 赋值时,是一个新int 对象被指定对lfoo 所指向的数组对象中的第一个元素。但对于lfoo, 所指向的数组对象并没有变化, 只是数组内部发生了变化。

    1. 参数传递
    • python 中的参数传递可以理解为变量传值操作
    • def changeI(c):
          c=10
          
      
          
      if __name__=="__main__":
          
        #  nums=[100, 4, 200,1,3,2]
       #   s=Solution()
        #  c=s.longestConsecutive(nums)
          a=2
          changeI(a)
          print(a)
          
      

        a 输出依然为2,对于一个int 对象2, 和指向它的变量a, 值传递,复制了变量a的值。a,c 指向同一个int 对象,c=10,int 不能改变,生成一个新的int 对象,c指向这个新对象,a指向的对象没有变化。

    • def changeI(c):
          c[0]=10
          
      
          
      if __name__=="__main__":
          
        #  nums=[100, 4, 200,1,3,2]
       #   s=Solution()
        #  c=s.longestConsecutive(nums)
          a=[2]
          changeI(a)
          print(a[0])
      

        输出10,变量依旧是传值,复制a的值,a和c 指向同一个对象,但是list 可改变对象,对 c[0]的操作,就是对a的操作。

    python 中的string类型?

    python 中的list 类型?

    python 中的set 类型?

    • issubset()
    • in , not in
    • union, intersection, difference
    • .discard(a)
    • .remove(a)  , 不存在时, 回报错。

    python 中的in? range 的范围?

    python 中的self?

  • 相关阅读:
    【POJ】1204 Word Puzzles
    【POJ】1816 Wild Words
    【HDOJ】1247 Hat’s Words
    【HDOJ】2609 How many
    【POJ】1035 Spell checker
    【POJ】2418 Hardwood Species
    【POJ】1056 IMMEDIATE DECODABILITY
    数列有序!
    绝对值排序
    C语言合法标识符
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7406011.html
Copyright © 2020-2023  润新知