java – 查找给定字符串的每个可能的子集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 查找给定字符串的每个可能的子集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1746字,纯文字阅读大概需要3分钟。
内容图文
参见英文答案 > Memory efficient power set algorithm 5个
我试图在Java中找到每个可能的字符串字符串 – 我的意思是,如果我有一个4个字符长的单词,我想要从它派生的所有可能的3个字符长单词,所有2个字符长,所有1性格长.我最直接的方法是在字符串上使用两个嵌套的for循环和iterare.这是我现在的代码:
private ArrayList<String> subsets(String word){
ArrayList<String> s = new ArrayList<String>();
int length = word.length();
for (int c=0; c<length; c++){
for (int i=0; i<length-c; i++){
String sub = word.substring(c, c+i+1);
System.out.println(sub);
//if (!s.contains(sub) && sub!=null)
s.add(sub);
}
}
//java.util.Collections.sort(s, new MyComparator());
//System.out.println(s.toString());
return s;
}
我的问题是它适用于3个字母的单词,有趣的是这个结果(不介意排序,单词被处理,以便我有一个字母顺序排列的字符串):
f
fn
fnu
n
nu
u
但是当我尝试4个字母的单词时,它会留下一些东西,就像catq给我的那样:
a
ac
acq
acqt
c
cq
cqt
q
qt
t
也就是说,我没有看到3个字符的长字行为 – 这是我在测试这种方法时所寻找的那个.我无法理解问题所在,而且这很可能是我在创建子串时所犯的逻辑错误.如果有人可以帮助我,请不要给我代码,而是给你解决方案背后的原因.这是一个课程作业,我需要自己提出代码.
编辑:清除一些东西,对我来说,acq,qca,caq,aqc,cqa,qac等都是一回事 – 为了使它更清晰,会发生的是字符串按字母顺序排序,所以这些排列应该是一个独特的结果,acq.所以,我不需要字符串的所有排列,而是给定一个4个字符长的字符串,我可以从中得到所有3个字符长的字符串 – 这意味着一次取出一个字符并返回该字符串结果,为原始字符串中的每个字符执行此操作.
我希望我的问题更加清晰
解决方法:
它工作正常,你在测试/输入中拼错了“caqt”作为“acqt”.
(问题可能在于您正在对输入进行排序.如果您想要substrings,则必须保持输入未排序.)
编辑后:见Generating all permutations of a given string然后只需对各个字母进行排序,然后将它们放入一组中.
内容总结
以上是互联网集市为您收集整理的java – 查找给定字符串的每个可能的子集全部内容,希望文章能够帮你解决java – 查找给定字符串的每个可能的子集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。