2017-04-17 42 views
2

我有兩個字符串查詞可能出現的數量在一個字符串

s1 = "cAda" 

s2 = "AbrAcadAbRa" 

需要找出第二個字符串序列字符串之一。

output = 2 which is (Acad, cadA) 
+2

你能解釋一下多一點有關你想達到什麼目的。請舉一些例子。 –

+0

添加您的代碼,以便我們可以清楚地知道您正在嘗試做什麼 –

+3

Techgig問題。 – halim

回答

1

輸入:

4 
11 
cAda 
AbrAcadAbRa 

輸出:2

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

class GFG { 
public static void main (String[] args) { 
    //code 
     Scanner in = new Scanner(System.in); 
    int output = 0; 
    int ip1 = Integer.parseInt(in.nextLine().trim()); 
    int ip2 = Integer.parseInt(in.nextLine().trim()); 
    String ip3 = in.nextLine().trim(); 
    String ip4 = in.nextLine().trim(); 
    output = appearanceCount(ip1,ip2,ip3,ip4); 
    System.out.println(String.valueOf(output)); 
} 

    public static int appearanceCount(int input1,int input2,String 
    input3,String input4) 
{ 
//Write code here 
int a= permute(input3,0,input3.length()-1,input4); 
return a; 
} 
static int count=0; 
public static int permute(String str, int l, int r,String mainstr) 
{ 

    if (l == r){ 
    if(mainstr.contains(str)){ 
     count++; 

    } 
    } 
    else 
    { 
     for (int i = l; i <= r; i++) 
     { 
      str = swap(str,l,i); 
      permute(str, l+1, r,mainstr); 
      str = swap(str,l,i); 
     } 
    } 
    return count; 
} 
public static String swap(String a, int i, int j) 
{ 
    char temp; 
    char[] charArray = a.toCharArray(); 
    temp = charArray[i] ; 
    charArray[i] = charArray[j]; 
    charArray[j] = temp; 
    return String.valueOf(charArray); 
} 
} 
+1

這是美麗..!非常感謝你@halim –

0

在這裏你去:

public static boolean containsWord(String str, String word){ 
    for(char c : word.toCharArray()){ 
     if(!str.toLowerCase().contains(String.valueOf(c).toLowerCase())){ 
      return false; 
     } 
    } 
    return true; 
} 

調用上面的方法有兩個字符串,例如:

String s1 = "cAda"; 
s1 = s1.chars().mapToObj(c -> String.valueOf((char) c)).distinct().collect(Collectors.joining()); //Remove duplicate characters 
String s2 = "AbrAcadAbRa"; 
int length = s1.length(); 
for(int i=0 ; i< s2.length() - s1.length() ; i++){ 
    if(containsWord(s2.substring(i, i+length), s1)){ 
     System.out.println(s2.substring(i, i+length)); 
    } 
} 

如果您想區分大小寫比較,那麼您可以在containsWord方法中刪除.toLowerCase()

+0

如果's1'有多個相同的字母,這將不起作用。另外,我相信搜索區分大小寫,但字母順序並不重要。 – Andreas

+0

@Andreas更新了答案 –

0

它也可能是這樣

int findSequence(final String pat, final String str) { 
String modPat = pat + pat; 
int count = 0; 
for (int i = 0; i < pat.length(); i++) { 
    String substring = modPat.substring(i, i + pat.length()); 
    int indexOf = str.toLowerCase().indexOf(substring.toLowerCase()); 
    if (indexOf != -1) { 
    System.out.println(str.substring(indexOf, indexOf + pat.length())); 
    count++; 
    } 
} 
return count; 
} 
+0

我相信搜索區分大小寫,但字母順序並不重要。 – Andreas

相關問題