我有一个简单的字符串“abc”。现在我必须编写Python代码来创建所有可能的唯一子串,除了空字符串,从这个字符串。
答案应如下: 一个 b C AB AC 公元前 ABC
我写了这样的话:
def getsubstrings(str):
sub = []
length = len(str)
for i in range(length):
for j in range(i,length):
sub.append(str[i:j+1])
sub.sort()
return sub
str = "abc"
print (getsubstrings(str))
但这可能是错误的方式,因为它没有给出预期的结果。
有人可以帮我提供有效的解决方案。
提前致谢。
答案 0 :(得分:3)
内置的itertools库(files.get)有一些很棒的功能可以使用。对于不同长度的字符串,您基本上希望获得可能的字母组合。
因此下面的代码示例循环遍历字符串的大小:(1,2,3),获取该特定大小的所有可能组合,以及"链",或者附加它们。 itertools中的函数使用迭代器,这意味着最终答案不会存储在内存中,而是在需要值时创建。对于较大的字符串,这将使用更少的RAM。
Exception in thread "main" java.lang.NullPointerException
at Cafe.setName(Cafe.java:14)
at CubanCafe.main(CubanCafe.java:16)
import java.util.Scanner;
public class CubanCafe
{
public static void main(String[] args)
{
String stateName;
Scanner scan = new Scanner(System.in);
System.out.print(" Enter state: ");
stateName = scan.nextLine();
Cafe cafeState = new Cafe(stateName);
cafeState.setName();
cafeState.setTaxRate();
System.out.println(cafeState);;
System.out.println(cafeState.getTaxRate());
}
}
public class Cafe {
private String state, name;
private double taxRate;
public Cafe(String state){
state = state.toUpperCase( );
name = null;
taxRate = 0;
}
public void setName(){
if(state.equals("MD"))
name = "Parkville Cuban Cafe";
else if(state.equals("VA"))
name = "Alexandria Cuban Cafe";
else
name = null;
}
public void setTaxRate(){
if (state.equals("MD"))
taxRate = .06;
else if (state.equals("VA"))
taxRate = .04;
else
taxRate = 0;
}
public double getTaxRate(){
return taxRate;
}
public String toString(){
return (name);
}
}
答案 1 :(得分:1)
combnations将帮助您实现结果
data= 'abc'
from itertools import combinations
for num in xrange(1,len(data)+1):
for i in combinations(data,num):
print ''.join(i)
a
b
c
ab
ac
bc
abc
答案 2 :(得分:0)
使用itertool combinations创建不同长度的组合。
>>> from itertools import combinations
>>> s = "abc"
>>> result = []
>>> for l in range(1, len(s)+1):
... for c in combinations(s,l):
... result.append(c)
...
>>> print result
[('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c'), ('a', 'b', 'c')]
您可以稍后更改结果的格式,例如:
>>> result = [''.join(r) for r in result]
>>> print result
['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']