2つの文字列の文字が完全に同じ適用を迅速に比較
私にはこのようなビジネスニーズがあります.
============================================================
文字列の配列が入力され、すべての要素の組合せの集合が返されます.
ep:
input :
String[]strs={「需要」、「カテゴリ」、「その他」};
output :
[需要、カテゴリ、その他、需要|カテゴリ、需要|その他、カテゴリ|その他、需要|カテゴリ|その他]
===========================================================
次は私のソリューションです.
===========================================================
============================================================
文字列の配列が入力され、すべての要素の組合せの集合が返されます.
ep:
input :
String[]strs={「需要」、「カテゴリ」、「その他」};
output :
[需要、カテゴリ、その他、需要|カテゴリ、需要|その他、カテゴリ|その他、需要|カテゴリ|その他]
===========================================================
次は私のソリューションです.
===========================================================
import java.util.ArrayList;
import java.util.Stack;
/**
* :
*
* @author dell
*/
public class Test
{
public static void main(String[] args)
{
String[] strs = { " ", " ", " " };
for (int i = 1, size = strs.length; i <= size; i++)
{
ArrayUtil.getSequence(strs, 0, i);
}
if (ArrayUtil.list != null)
{
for (String string : ArrayUtil.list)
{
System.out.println(string);
}
}
}
}
/**
* : .<br>
*
* @author dell
*/
class ArrayUtil
{
/**
* :
*/
private static Stack<String> STR_STACK = new Stack<String>();
/**
* :
*/
public static MyArrayList<String> list = new MyArrayList<String>();
/**
* : ,
*
* @param strs
* @param begin
* @param num
*/
public static void getSequence(String[] strs, int begin, int num)
{
if (num == 0)
{
int i = 0;
String string = "";
for (String s : STR_STACK)
{
if (i == 0)
{
string += s;
}
else
{
string += "|" + s;
}
i++;
}
if (!list.contains(string))
{
list.add(string);
}
}
else
{
for (int i = begin, size = strs.length; i < size; i++)
{
STR_STACK.push(strs[i]);
swapArray(strs, begin, i);
getSequence(strs, begin + 1, num - 1);
swapArray(strs, begin, i);
STR_STACK.pop();
}
}
}
/**
* : .<br>
*
* @param strs
* @param begin
* @param index
*/
private static void swapArray(String[] strs, int begin, int index)
{
if (begin == index)
{
return;
}
else
{
String s = strs[begin];
strs[begin] = strs[index];
strs[index] = s;
}
}
}
/**
* : , ArrayList.<br>
*
* @author dell
* @param <E>
*/
class MyArrayList<E> extends ArrayList<E>
{
private static final long serialVersionUID = -1807603974870350857L;
@Override
public int indexOf(Object o)
{
Object[] elementData = toArray();
int size = size();
if (o == null)
{
for (int i = 0; i < size; i++)
if (elementData[i] == null)
return i;
}
else
{
for (int i = 0; i < size; i++)
{
if (o.equals(elementData[i]))
{
return i;
}
else if (o instanceof String && elementData[i] instanceof String)
{
// //
if (validateStrings((String) o, (String) elementData[i]))
{
return i;
}
}
}
}
return -1;
}
/**
* : 。<br>
* : 0. ,<br>
* , 。<br>
*
* @param str1
* @param str2
* @return
*/
private boolean validateStrings(String str1, String str2)
{
// //
if (str1.length() != str2.length())
{
return false;
}
char[] str1Chars = str1.toCharArray();
char[] str2Chars = str2.toCharArray();
int i = 1;
for (char c : str1Chars)
{
i ^= c;
}
for (char c : str2Chars)
{
i ^= c;
}
if (i == 1)
{
return true;
}
else
{
return false;
}
}
}