[英]How can I iterate over a string in Java?
public static Boolean cmprStr( String s1, String s2 )
{
// STUFF
}
我想遍歷 s1 以確保 s1 中的每個字符都包含在 s2 中。
for(char c: s1.toCharArray()){
if(s2.indexOf(c) == -1){
return false;
}
}
return true;
假如說
s1 = "aabb";
s2 = "ccddaannbbss";
將返回真。
public static Boolean cmprStr( String s1, String s2 )
{
for (int i = s1.length() - 1; i >= 0; --i) {
if (s2.indexOf(s1.charAt(i)) == -1) {
return Boolean.FALSE;
}
}
return Boolean.TRUE;
}
length()
會給你一個字符串的長度
charAt( someIndex)
將為您提供給定 position 的字符,因此您可以迭代第一個字符串。
indexOf( achar )
會給你一個字符串中的字符,或者 -1 如果它不存在。 因此,您應該能夠在第二個字符串中查找第一個字符串中的每個字符。
所有其他答案都是 O(n^2)。 這是使用Google Guava的一種時間線性方式(即 O(n)):
public static boolean cmprStr(String s1, String s2) {
Set<Character> desiredCharacters = Sets.newHashSet(Lists.charactersOf(s2));
return Sets.difference(Sets.newHashSet(Lists.charactersOf(s1)), desiredCharacters).isEmpty();
}
Set<Character> charsInS1 = new HashSet<Character>();
for (int i = 0; i < s1.length(); i++) {
charsInS1.add(s1.charAt(i));
}
for (int i = 0; i < s2.length(); i++) {
charsInS1.remove(s2.charAt(i));
}
return charsInS1.isEmpty();
這具有O(n+m)
的復雜性 ...使用indexOf
的答案具有O(n*m)
的復雜性。 當然,它確實暫時使用了一些額外的 memory。
為什么不簡單地使用“等於”方法?
Boolean b = s1.equals(s2);
Java 中的每個String
也是一個CharSequence
。 因此,您可以使用簡單的 for 循環輕松地遍歷String
:
int n = s.length();
for (int i = 0; i < n; ++i) {
char c = s.charAt(i);
...
}
// Here's some code I wrote to find CG ratio in a gene
public double findCgRatio(String gene)
{
double cCount =0.0;
double gCount =0.0;
gene = gene.toLowerCase();
for(char character : gene.toCharArray())
{
if(character == 'c')
{
cCount++;
}
else if(character == 'g')
{
gCount++;
}
}
System.out.println("CG Ratio was :" + (cCount/gCount) );
return cCount/gCount; // cgRatio
}
據我了解,這將是一個問題。
//for each character in s1
//if s2 does not contain character return false
//return true
for(int i = 0; i < length s1; i++){
if(!s2.contains(String.valueOf(s1.charAt(i)))){
return false;
}
}
return true;
這驗證了 s1 中的每個字符都在 s2 中。 它不確認順序,也不確認有多少,也不是equals方法。
遞歸:
public static Boolean cmprStr( String s1, String s2 )
{
if(s1.length() == 0 )
{
return true;
}
if(!s2.contains(s1.substring(0,1)))
{
return false;
}
return cmprStr(s1.substring(1), s2);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.